Linux 平台按文件大小排序,输出包含空格的文件名
find . -type f -exec stat --format="%s %n" {} + | sort -n -r | while read size filename; do echo "$filename"; done
解释
find . -type f:查找当前目录及子目录中的所有文件。
stat --format="%s %n" {}:对于每个文件,使用 stat 获取文件大小和文件名。
%s:文件大小(以字节为单位)。
%n:文件的完整路径(包括空格的文件名)。
sort -n -r:按文件大小倒序排序,-n 表示按数值排序,-r 表示从大到小排序。
while read size filename; do echo "$filename"; done:通过 while read 循环来逐行读取排序后的结果,size 和 filename 会分别接收到大小和文件名。由于 read 会将行分割成多个变量,它会正确地将带空格的文件名处理为一个整体。
执行结果
假设有以下文件:
file 1.txt(大小:1234 字节)
file 2.txt(大小:5678 字节)
file 3.txt(大小:91011 字节)
执行上述命令后,输出将是:
./file 3.txt
./file 2.txt
./file 1.txt
总结
通过 while read 循环,我们确保了文件名中包含空格时,整个文件名会被正确处理,并不会被拆分成多个部分。这样就能正确按文件大小排序,并输出完整的文件名。
希望这个改进的方案能满足你的需求。如果有任何问题,欢迎继续询问!