为什么readlink不显示完整路径?

时间:2014-10-14 20:58:52

标签: shell path readlink

我正在创建一个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

可能是什么问题?

2 个答案:

答案 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" )
  • 在子shell中运行,因此cd不会影响当前的shell。