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
循环,我们确保了文件名中包含空格时,整个文件名会被正确处理,并不会被拆分成多个部分。这样就能正确按文件大小排序,并输出完整的文件名。
希望这个改进的方案能满足你的需求。如果有任何问题,欢迎继续询问!