因此,我试图对大量文件执行批处理,但我希望批处理先从最小的文件开始。我需要做的是按升序获取所有文件名,按文件大小排序。我见过一些例子,但一个问题是一些文件名包含空格,连字符,下划线和其他特殊字符,所以我找不到任何适合我的东西。在BASH中按文件大小顺序列出文件名
回答
ls -rS
会做的伎俩。该名男子页详细解释:http://man7.org/linux/man-pages/man1/ls.1.html
find . -type f -print0 | xargs -0 wc -c | sort -n
上面的例子列出了大小的升序当前目录下的文件。 find命令的参数-print0
指示它使用null '\0'
字符而不是空格作为搜索结果之间的分隔符。在管道的另一端,-0
参数准备xargs
命令来做同样的事情。这将处理文件名中的空白字符作为普通字符。
'发现。 -type f -exec wc -c {} + | sort -n'是一个更符合POSIX标准的更高效的替代方案('-print0'不是)。但是,问题在于'wc'具有多于1个文件名参数,以'
如果:
- 你不担心与嵌入式换行符文件名和
- 你并不需要实际的文件大小,只是底层文件大小排序的文件名,
然后K. Matthews' answer应该为你工作。
否则,假设你有GNU公用事业:
find . -mindepth 1 -maxdepth 1 -type f -printf '%s\t%f\0' |
sort -zn -k1,1 |
while read -r -d '' size name; do echo "[$size] [$name]"; done
-mindepth 1 -maxdepth 1
限制匹配直接位于.
文件,类似于ls
(虽然隐藏文件总是包括在内)。忽略整个子树中的处理文件。
的while
循环示出了进一步处理由find
的-printf '...\0'
和sort -z
产生的NUL封端的输出的一种方法。
使用awk -F'\t' -v RS='\0' ...
是另一种。
注意find
的-printf
和sort
的-z
是非标准的,GNU的特定扩展,如使用'\0'
作为RS
值与awk
。
- 1. Bash脚本顺序文件大小
- 2. 按文件名顺序打印文件
- 3. 按文件名内的日期顺序列出目录中的所有文件?
- 4. WP_Query - 按文件名顺序附件?
- 5. Bash - 列表和排序文件及其大小和名称和大小
- 6. 按文件名中的数字顺序读取文件
- 7. 在BASH脚本中按顺序读取文件
- 8. 如何在bash中按字母顺序合并文件
- 9. newbie:php如何在文件名中按文件名的顺序读取
- 10. Bash脚本按大小排序文件数组
- 11. 列出大小大于N的文件
- 12. 按大小顺序显示目录和文件c#
- 13. PHP(文件夹)按字母顺序排列的文件列表?
- 14. 如何使用bash在目录中输出多个文件的文件大小?
- 15. 使用grunt按顺序排列文件
- 16. 在Flash中按顺序加载文件?
- 17. 重命名文件顺序
- 18. BizTalk顺序文件名
- 19. 命名文件顺序
- 20. gitignore按文件大小?
- 21. 如何在C#Windows中获取文件大小,文件名,文件扩展名?
- 22. 为什么bash不能区分文件名中的大小写?
- 23. bash中大于100K的列表文件
- 24. PHP文件名和文件大小输出
- 25. Bash命令递归列出文件,但按分类排序
- 26. Matlab dir('*。txt')命令未按顺序列出txt文件
- 27. Umbraco输出文件大小
- 28. writeRaster输出文件大小
- 29. 在bash中按日期排序的文件列表
- 30. 在bash中重命名文件夹,文件和子文件夹
这将不会处理它们之间存在空间的文件,正如问题所示。 – Inian
@Inian为什么不呢? 'ls'将用空格处理文件,回车完美;我看到的* only *问题在于,OP打算将这个输出用作脚本的输入 - 但是您的答案并不能为此提供解决方案。 –