linux - 在循环内对查找的输出进行排序

标签 linux sorting unix find sh

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

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

我有一个 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

最佳答案

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

相反,将整个循环的输出通过管道传递给 sort:

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

关于linux - 在循环内对查找的输出进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43981992/

相关文章:

c - fork 后 exec 系统调用中的调度策略

linux - 远程命令执行在这里文档和分配变量

java - 如何将 Vector 的内容转储到新文件中?

c - 如何消除结构体中的重复项,并使用 qsort 在 C 中对它们进行排序

linux - 如何搜索和替换单词但使用 vi 进行确认

linux - 如何使用 glob 模式查找具有两个以上字母但不以特定两个字母开头的单词以进行 tcsh 文件匹配?

matlab - 在 MATLAB 中对顺时针多边形点进行排序

python - python中列表的排序列表

windows - 如何从 Windows 网络服务器上的管理共享中获取 html 文件

unix - 如何使用 echo 命令打印出文本文件的内容?