我正在创建一个shell脚本来搜索具有特定名称的文件并显示其完整路径和大小。
例如:
/home/miglui/Desktop/SO/teste/1/teste.txt: 14 bytes
我遇到问题的细分代码是下一个:
for i in `find $1 -name $4 -type f -printf "%s "` ; do
path=`readlink -f $4`
echo "$path: $i bytes"
done
代码返回:
/home/miglui/Desktop/SO/teste.txt: 14 bytes
/home/miglui/Desktop/SO/teste.txt: 48 bytes
/home/miglui/Desktop/SO/teste.txt: 29 bytes
但应该回复:
/home/miglui/Desktop/SO/teste/1/teste.txt: 14 bytes
/home/miglui/Desktop/SO/teste/2/teste.txt: 48 bytes
/home/miglui/Desktop/SO/teste/teste.txt: 29 bytes
可能是什么问题?
答案 0 :(得分:1)
问题是循环的每次迭代都会打印脚本的参数4($4
)。这与您find
的结果无关。也许你想要更像这样的东西:
while read size name; do
path=`readlink -f $name`
echo "$path: $size bytes"
done < `find $1 -name $4 -type f -printf '%s %h/%f\n'`
答案 1 :(得分:0)
您正在检索3个不同文件的大小,但仅报告您传入的参数的名称。
试试这个:
( cd -P -- "$1" && find "$(pwd -P)" -name "$4" -type f -printf "$p: %s bytes\n" )