如何查找目录及其子目录中的最大文件?
我们刚刚开始了一个UNIX类,正在学习各种Bash命令。 我们的任务涉及在一个目录下执行各种命令,该目录下面还有许多文件夹。
我知道如何使用以下命令列出并计算根文件夹中的所有常规文件:
find . -type l | wc -l
但我想知道从哪里去找到整个目录中最大的文件。 我已经看到了一些关于du
命令的问题,但我们还没有意识到这一点,所以在我们学习的东西中我假设我们需要以某种方式将它连接到ls -t
命令。
如果我的'行话'不正确,请原谅我,我仍然习惯它!
从这个链接引用 -
如果您想查找并打印特定目录及其子目录中前10个最大的文件名称(而不是目录)
$ find . -printf '%s %pn'|sort -nr|head
要将搜索限制到当前目录,请使用“-maxdepth 1”和find。
$ find . -maxdepth 1 -printf '%s %pn'|sort -nr|head
并打印前10名最大的“文件和目录”:
$ du -a . | sort -nr | head
**使用“head -n X”而不是上面唯一的“head”来打印前X个最大的文件(在所有上面的例子中)
要查找当前目录及其子目录中的前25个文件,请执行以下操作:
find . -type f -exec ls -al {} ; | sort -nr -k5 | head -n 25
这将通过“sort -nr -k5”管道命令通过基于文件大小进行排序来输出前25个文件。
find . -type f | xargs ls -lS | head -n 1
输出
-rw-r--r-- 1 nneonneo staff 9274991 Apr 11 02:29 ./devel/misc/test.out
如果你只是想要文件名:
find . -type f | xargs ls -1S | head -n 1
这避免了使用awk
并允许你在ls
使用你想要的任何标志。
警告。 因为xargs
试图避免构建超长的命令行,所以如果您在具有大量文件的目录上运行它,可能会失败,因为ls
最终会执行多次。 这不是一个无法克服的问题(你可以从每个ls
调用中收集head -n 1
输出,然后再次运行ls -S
,直到你有一个文件),但是它确实有点损害了这种方法。
上一篇: How to find the largest file in a directory and its subdirectories?