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

Shell 为什么readlink不显示完整路径?,shell,path,readlink,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/Des

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

有什么问题吗?

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

试试这个:

( cd -P -- "$1" && find "$(pwd -P)" -name "$4" -type f -printf "$p: %s bytes\n" )
  • 在子shell中运行,以便cd不会影响当前shell

    • 问题是循环的每次迭代都会打印脚本的参数4(
      $4
      )。这与
      查找的结果无关。也许你想要更像这样的东西:

      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'`
      
      读取尺寸名称时;做
      path=`readlink-f$name`
      echo“$path:$size字节”
      完成<`find$1-name$4-type f-printf'%s%h/%f\n'`
      
      编辑代码以容纳包含内部空格的文件名。