3

我遇到了以下命令,它几乎可以满足我的需要:

find . -type f -print0 | xargs -0 ls -l | sort -k5,5rn > ~/files.txt

现在,我不知道这意味着什么(希望得到解释,但不是那么重要)。

我需要添加的一件事是不要打扰特定的文件夹(即我有一个包含成千上万个 Word 文档的 Documents 文件夹,这使得这个命令需要很长时间)。

任何人都可以建议对上述命令添加一个忽略给定文件夹的命令吗?

4

3 回答 3

5

Exclude paths matching */Documents/* from find:

find . -type f ! -path "*/Documents/*" -print 0 | ...
于 2013-07-10T18:20:53.213 回答
5

既然你要求解释...

find . -type f -print0

这就是find实用程序,它遍历文件系统以找到与您想要的内容相匹配的内容。本质上.意味着它将尝试查找任何内容,但由于您指定-type f它只会查找“常规文件”。 -print0,正如您可能已经猜到的那样,只需打印标准输出的完整路径(对管道很有用)。它在每行的末尾使用一个空字符(与 相反-print,这将在稍后相关)。

xargs -0 ls -l

xargs从标准输入中获取事物列表,然后使用作为参数传递给它的内容执行给定的命令(“实用程序”)。在这种情况下,实用程序是命令ls -l,因此 xargs 从中获取结果find并对其执行ls -l,为您提供长而完整的路径;这基本上只是一种将文件列表转换为包含大小等信息的文件列表的方法。该-0选项允许 xargs 将空字符解释为行之间的分隔符,其存在(几乎?)只是为了允许它与-print0上面的选项一起使用。

sort -k5,5rn > ~/files.txt

sort很酷。它对事物进行分类。 -k告诉它按哪一列排序,在这种情况下是第 5 列(并且只有第 5 列)。位表示使用rn数字排序并反转顺序。默认值在底部最大,因此这会将最大放在首位。如果您使用单位后缀(B、K、M、G 等)使用ls -lh.

于 2013-07-16T16:53:25.157 回答
1

查找大文件的不同选项或其他方法:

  • find ~ -size +100M ! -path ~/Documents\* ! -path ~/Library\*
  • find ~ -size +100M | grep -v "^$HOME/Documents/" | while IFS= read -r l; do stat -f'%z %N' "$l"; done | sort -rn
  • shopt -s extglob; find ~/!(Documents) -type f -exec stat -f'%z %N' {} \; | sort -rn | head -n200
  • mdfind 'kMDItemFSSize>=1e8&&kMDItemContentTypeTree!=public.directory' | while IFS= read -r l; do stat -f'%z %N' "$l"; done | sort -rn

您也可以只使用 Finder:

于 2013-07-10T18:29:03.330 回答