在循环内对find的输出进行排序

时间:2017-05-15 14:25:23

标签: linux sorting unix find sh

这是我在StackOverflow上的第一篇文章,所以请保持温和。

我要做的是按大小(从最大到最小)对find的输出进行排序。

我有一个file.txt,其中包含:

file1
file2
file3
file4
file5
file6

我的代码如下所示:

for x in $(cat file.txt)
do
find -name $x -printf '%s %p\n'| sort -rn
done

但是输出没有排序。

输出是文件的路径(很棒),它们的大小与文件中的顺序相同。

例如:

 128  /dir1/file1
 8 /dir2/file2
 0 file3
 4 file4
 ...
 and so on

1 个答案:

答案 0 :(得分:0)

您对find的来电为每个文件打印一行,然后发送到sort。由于sort每次调用时只获得一行,因此无需排序,文件按照file.txt中列出的顺序输出。

相反,将整个循环的输出传递给sort

for x in $(cat file.txt)
do
find -name $x -printf '%s %p\n'
done| sort -rn