Bash脚本:按文件大小对数组进行排序

3

我希望能按文件大小对我的目录中的文件进行排序。目前,我已经找到了具有特定扩展名(例如*.txt)的所有文件,并将该列表中的所有值添加到我的未排序数组中。我尝试按大小对数组中的所有元素进行排序,但是最后一行的“-S”会导致错误。

list=$(find . -name "*."$1)
unsortedA=()
for x in $list
do
    unsortedA+=($x)
done

sortedA=( $(for arr in "${unsortedA[@]}" 
do
        echo $arr
done | sort -S) ) #This Line Here*

编辑:这些行都可以替换为:

list=$(ls -S *.$1)
1个回答

3

通常,按文件大小排序文件列表的方法是:

ls -lS *.$1

无论如何,sort -S 是没有意义的。 -Sls的一个选项;它在sort中有不同的含义。(而且这个含义在此处完全无关紧要。)
如果你只想要按文件大小排序的文件名列表,请使用:
ls -S *.$1

将其导入到您想要用于格式化的任何内容中。

我不使用ls的原因是因为我想以自定义格式从数组中打印。有没有办法在数组中按大小排序? - CarlinLiu
@CarlinLiu:基本上不行。请编辑您的问题,让您的用例更清晰明了。 - rici
谢谢你的所有帮助。我刚刚将ls设置为一个变量,并在for循环中使用它! - CarlinLiu
@carlinLiu:将其导入到“while read -r filename; do ... done”中是处理文件名迭代的常规方法。否则,文件名中的空格会使事情变得混乱。如果您稍微查找一下,就会发现很多示例。 - rici

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接