【发布时间】:2013-06-23 20:33:56
【问题描述】:
我有问题。我需要编写一个 bash 脚本来查找给定路径中的所有文件和目录,并显示一些有关结果的信息。允许的时间:30 秒。
#!/bin/bash
DIRS=0
FILES=0
OLD_FILES=0
LARGE_FILES=0
TMP_FILES=0
EXE_FILES=0
IMG_FILES=0
SYM_LINKS=0
TOTAL_BYTES=0
#YEAR_AGO=$(date -d "now - 1 year" +%s)
#SECONDS_IN_YEAR=31536000
function check_dir {
for entry in "$1"/*
do
if [ -d "$entry" ]; then
((DIRS+=1))
check_dir "$entry"
else if [ -f "$entry" ]; then
((FILES+=1))
#SIZE=$(stat -c%s "$entry")
#((TOTAL_BYTES+=SIZE))
#CREATE_DATE=$(date -r "$entry" +%s)
#CREATE_DATE=$(stat -c%W "$entry")
#DIFF=$((CREATE_DATE-YEAR_AGO))
#if [ $DIFF -ge $SECONDS_IN_YEAR ]; then
# ((OLD_FILES+=1))
#fi
fi
fi
done
}
if [ $# -ne 2 ]; then
echo "Usage: ./srpt path emailaddress"
exit 1
fi
if [ ! -d $1 ]; then
echo "Provided path is invalid"
exit 1
fi
check_dir $1
echo "Execution time $SECONDS"
echo "Dicrecoties $DIRS"
echo "Files $FILES"
echo "Sym links $SYM_LINKS"
echo "Old files $OLD_FILES"
echo "Large files $LARGE_FILES"
echo "Graphics files $IMG_FILES"
echo "Temporary files $TMP_FILES"
echo "Executable files $EXE_FILES"
echo "Total file size $TOTAL_BYTES"
以下是上面注释行的执行结果:
Execution time 1
Dicrecoties 931
Files 14515
Sym links 0
Old files 0
Large files 0
Graphics files 0
Temporary files 0
Executable files 0
Total file size 0
如果我要删除评论
SIZE=$(stat -c%s "$entry")
((TOTAL_BYTES+=SIZE))
我明白了:
Execution time 31
Dicrecoties 931
Files 14515
Sym links 0
Old files 0
Large files 0
Graphics files 0
Temporary files 0
Executable files 0
Total file size 447297022
31 秒。我怎样才能加快我的脚本? 再过 30 秒,可以找到日期创建更多一年的文件
【问题讨论】:
-
如果目录名或文件名有空格或其他有趣的符号,这从一开始就被破坏了。
-
我已经通过在所有带路径的变量之前和之后添加“”解决了这个问题。还是我错过了什么?
-
你错过了一件重要的事情:你正在解析
find的输出! -
find输出有什么问题? -
不,不要假设,这是糟糕的做法!我绝不会让你那样做!
标签: linux bash shell unix scripting