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
这与示例中的 KB 和 MB 无关。您正在按相反顺序执行数字排序。80 和 20 都大于 8.5,因此它们首先显示。排序时会忽略字母。另请参见列表中间的 4.0K。
find ~ -maxdepth 1 -size +1024c -type f -exec du -h {} \; | sort -nr | head -14 | awk '{print $2}' | xargs -l basename
最简单的方法是使用(
sort -hr
如果你的版本sort
支持的话)。我有排序 (GNU coreutils) 8.22而且效果非常好。这是完整的列表吗?您应该看到与之前相同数量的文件,可能由于排序和截断部分而导致文件不同。请提供您使用的确切命令行。
答案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 命令