所以,我正在尝试对很多文件执行批处理,但我希望批处理首先从最小的文件开始。我需要做的是按升序获取所有文件名,按文件大小排序。我看过一些例子,但有一个问题是有些文件名包含空格,连字符,下划线和其他特殊字符,所以找不到对我有用的东西。
答案 0 :(得分:6)
ls -rS
会做到这一点。手册页解释了更多:http://man7.org/linux/man-pages/man1/ls.1.html
答案 1 :(得分:1)
<强> find . -type f -print0 | xargs -0 wc -c | sort -n
强>
上面的示例按大小的升序列出当前目录下的文件。 find命令的-print0
参数指示它使用null '\0'
字符而不是空格作为搜索结果之间的分隔符。在管道的另一端,-0
参数准备xargs
命令执行相同的操作。这将把文件名中的空白字符作为普通字符处理。
答案 2 :(得分: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
和awk -F'\t' -v RS='\0' ...
生成的NUL终止输出的方法。
使用find
是另一个。
请注意-printf
sort
和-z
&#39; s '\0'
是非标准的GNU特定扩展,使用{{1} {}为RS
值awk
。