Linux 平台按文件大小排序,输出包含空格的文件名

find . -type f -exec stat --format="%s %n" {} + | sort -n -r | while read size filename; do echo "$filename"; done

解释

  1. find . -type f:查找当前目录及子目录中的所有文件。
  2. stat --format="%s %n" {}:对于每个文件,使用 stat 获取文件大小和文件名。
    • %s:文件大小(以字节为单位)。
    • %n:文件的完整路径(包括空格的文件名)。
  3. sort -n -r:按文件大小倒序排序,-n 表示按数值排序,-r 表示从大到小排序。
  4. while read size filename; do echo "$filename"; done:通过 while read 循环来逐行读取排序后的结果,sizefilename 会分别接收到大小和文件名。由于 read 会将行分割成多个变量,它会正确地将带空格的文件名处理为一个整体。

执行结果

假设有以下文件:

  • file 1.txt(大小:1234 字节)
  • file 2.txt(大小:5678 字节)
  • file 3.txt(大小:91011 字节)

执行上述命令后,输出将是:

./file 3.txt
./file 2.txt
./file 1.txt

总结

通过 while read 循环,我们确保了文件名中包含空格时,整个文件名会被正确处理,并不会被拆分成多个部分。这样就能正确按文件大小排序,并输出完整的文件名。

希望这个改进的方案能满足你的需求。如果有任何问题,欢迎继续询问!