0

我正在制作一个 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

可能是什么问题?

4

2 回答 2

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'`
于 2014-10-14T21:12:05.293 回答
0

您正在检索 3 个不同文件的大小,但只报告您传入的参数的名称。

尝试这个:

( cd -P -- "$1" && find "$(pwd -P)" -name "$4" -type f -printf "$p: %s bytes\n" )
  • 在子 shell 中运行,因此 cd 不会影响当前 shell。
于 2014-10-14T21:11:20.803 回答