文件排序混乱

文件排序混乱

Q1. 我有一个命令,但我不明白为什么它先按千字节然后按兆字节对文件大小进行排序?

$ find ~ -maxdepth 1 -size +1024c -type f -exec du -h {} \; | sort -nr

80K /home/sl6/S3401636/Lab 4- Reporting Overview in IBM RQM(2).pdf
20K /home/sl6/S3401636/.bash_history
8.5M    /home/sl6/S3401636/Software-Testing-Chapter-4-Test Design Techniques.pdf
7.7M    /home/sl6/S3401636/Software-Testing-Chapter-2 Software Lifecycle.pdf
6.2M    /home/sl6/S3401636/Week5b.ppt
5.1M    /home/sl6/S3401636/Software-Testing-Chapter-5-Test Management.pdf
4.7M    /home/sl6/S3401636/Week 9 - Mobile devices.ppt
4.0K    /home/sl6/S3401636/.viminfo
3.4M    /home/sl6/S3401636/Software-Testing-Chapter-3-Static Techniques.pdf
3.2M    /home/sl6/S3401636/Software-Testing-Chapter-6.pdf
1.9M    /home/sl6/S3401636/Week5a.ppt
1.8M    /home/sl6/S3401636/Lab 8 - Results and Report Analysis(2).pdf
1.6M    /home/sl6/S3401636/Lab 7 - Running a Schedule in IBM's RPT(2).pdf
1.4M    /home/sl6/S3401636/lab01(3).pdf
1.3M    /home/sl6/S3401636/Week 10 Human Capabilities.pdf
1.2M    /home/sl6/S3401636/week05.pdf

如果我将“head”命令放到最后

$ find ~ -maxdepth 1 -size +1024c -type f -exec du -h {} \; | sort -nr | head -14

1.2M    /home/sl6/S3401636/week05.pdf
1.3M    /home/sl6/S3401636/Week 10 Human Capabilities.pdf
1.4M    /home/sl6/S3401636/lab01(3).pdf
1.6M    /home/sl6/S3401636/Lab 7 - Running a Schedule in IBM's RPT(2).pdf
1.8M    /home/sl6/S3401636/Lab 8 - Results and Report Analysis(2).pdf
1.9M    /home/sl6/S3401636/Week5a.ppt
3.2M    /home/sl6/S3401636/Software-Testing-Chapter-6.pdf
3.4M    /home/sl6/S3401636/Software-Testing-Chapter-3-Static Techniques.pdf
4.0K    /home/sl6/S3401636/.viminfo
4.7M    /home/sl6/S3401636/Week 9 - Mobile devices.ppt
5.1M    /home/sl6/S3401636/Software-Testing-Chapter-5-Test Management.pdf
6.2M    /home/sl6/S3401636/Week5b.ppt
7.7M    /home/sl6/S3401636/Software-Testing-Chapter-2 Software Lifecycle.pdf
8.5M    /home/sl6/S3401636/Software-Testing-Chapter-4-Test Design Techniques.pdf

Q2.我想知道如何才能只获取文件名而不获取完整路径。我尝试使用 awk 和 basename,但无法正常工作。

Q3.另外,我该如何列出最高文件大小(从高到低和从低到高)

例如 8.5M、7.7M、6.2M、5.1M(从高到低)5.1M、6.2M、7.7M、8.5M

而不是从最低文件大小 1.2M 开始。

我认为我可以用“尾巴”来应对这种情况

Q4.最后,如果我删除上述命令中“du”的 -h 选项,我会得到一组不同的结果。为什么?

4   /home/sl6/S3401636/.viminfo
20  /home/sl6/S3401636/.bash_history
80  /home/sl6/S3401636/Lab 4- Reporting Overview in IBM RQM(2).pdf
1132    /home/sl6/S3401636/week05.pdf
1300    /home/sl6/S3401636/Week 10 Human Capabilities.pdf
1424    /home/sl6/S3401636/lab01(3).pdf
1628    /home/sl6/S3401636/Lab 7 - Running a Schedule in IBM's RPT(2).pdf
1812    /home/sl6/S3401636/Lab 8 - Results and Report Analysis(2).pdf
1924    /home/sl6/S3401636/Week5a.ppt
3208    /home/sl6/S3401636/Software-Testing-Chapter-6.pdf

答案1

  1. 这与示例中的 KB 和 MB 无关。您正在按相反顺序执行数字排序。80 和 20 都大于 8.5,因此它们首先显示。排序时会忽略字母。另请参见列表中间的 4.0K。

  2. find ~ -maxdepth 1 -size +1024c -type f -exec du -h {} \; | sort -nr | head -14 | awk '{print $2}' | xargs -l basename

  3. 最简单的方法是使用(sort -hr如果你的版本sort支持的话)。我有排序 (GNU coreutils) 8.22而且效果非常好。

  4. 这是完整的列表吗?您应该看到与之前相同数量的文件,可能由于排序和截断部分而导致文件不同。请提供您使用的确切命令行。

答案2

我没有使用 awk '{print $2}' | args -l basename,而是使用了

-printf "%s%f \ n"

像这样:

find ~ -maxdepth 1 -size +1024c -type f -printf "%s %f\n" | sort -nr | head -14

%f - 打印文件名 %s - 打印大小

删除了 du、awk 和 xargs 命令

相关内容