如何根据文件名对bash进行排序

时间:2019-03-31 07:00:37

标签: bash macos shell sorting

如何在bash shell中使用find命令进行正确排序。 例如

file name                   size              
---------------------------------------------
aa.txt                          346
bb.txt                          29
cc.txt                          36
dd.txt                          856

等等。 如果我尝试使用此方法使数组处理如下

find . -type f -iname "*.txt" | sort -nk9

然后列出的值不适合文件名列表...如何根据文件名排序?

declare -a size=$(find . -type f -iname "*.txt" | sort -nk9 )   
            size_array=$(size)

始终应根据文件名的实际顺序像这样(346,29,36,856)放出,这样可以是两个数组的最后一个是(aa.txt,bb.txt,cc.txt,dd.txt) 第一个文件必须匹配第一个大小元素..但在这种情况下不匹配..如何匹配??

最后我想放了!使用bash find命令

filename=(aa.txt, bb.txt, cc.txt,dd.txt)
filesize=(346,29,36,856) 

1 个答案:

答案 0 :(得分:3)

您的问题仍然不是很清楚。但是根据我对要求的理解,一个大概的解决方案是

files=$(find . -type f -iname "*.txt" | sort)
file_sizes=$(find . -type f -iname "*.txt" | sort | xargs -I{} stat -f%z {})

文件名位于files变量中,文件大小位于file_sizes变量中,并按字母顺序排序。