Shell 为什么readlink不显示完整路径?
我正在制作一个shell脚本来搜索具有特定名称的文件,并显示它们的完整路径和大小 例如: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
/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'`
编辑代码以容纳包含内部空格的文件名。