使用“find”查找文件并显示文件的大小

使用“find”查找文件并显示文件的大小

如何查找文件并同时查看文件的大小?错误:我尝试了此命令,但只获得了其他文件的大小和详细信息。

find -name "*.conf" | ls -l

答案1

find有一个-ls选项。因此你的命令应如下所示:

find -name '*.conf' -ls

答案2

一个选项是使用 指定你自己的格式-printf。例如这将输出文件大小,后跟空格,然后是文件名(带有相对路径):

find -name "*.conf" -printf "%s %p\n"

\0如果您希望使用 NUL 分隔 find 的输出记录,则可以用而不是来结束格式字符串\n,以防您期望文件名很有趣(例如,包含换行符的文件名)。


需要说明的是,您在问题中显示的尝试不起作用,因为您尝试将输出从find传输到 输入到lsls不会从 STDIN 读取任何输入,因此输出从find只是被丢弃,然后ls像往常一样列出当前目录的内容。

答案3

其他答案已经指出

  1. 如何find仅使用打印文件大小-printf
  2. 如何lsfind使用-ls
  3. 如何正确地find将输出通过管道传输到另一个程序xargs

但是,第一种方法和第二种方法不能给出ls -l(-ls标志等于ls -dils) 的准确输出,第三种方法需要额外xargs调用。借助标志,-exec可以ls -l直接从调用find

find -name "*.conf" -exec ls -l {} +

这将把整个文件名列表作为参数,ls -l并根据需要多次调用它。


如果你只想匹配.conf当前目录下所有以 结尾的文件(并且ARG_MAX没问题!) find你实际上根本不需要。相反,你可以使用bash的 glob 匹配和globstarshelldotglob选项,如下所示 - 同样明智地不要在文件名的换行符上中断,并匹配“隐藏”文件,例如find

$ shopt -s globstar dotglob
$ ls -l **/*.conf

答案4

ls不会从标准输入获取文件列表,它希望这些文件是参数。该xargs命令是将输入转换为参数的通用工具:

find -name '*.conf' | xargs ls -l

但是,这会在空格处分割输入,因此如果任何名称中有空格,您可能会遇到问题。find并且xargs有一些选项可以协同工作以缓解这种情况:

find -name '*.conf' -print0 | xargs -0 ls -l

-0选项xargs告诉它使用空字节作为输入中参数之间的分隔符,并-print0告诉find打印由空字节而不是换行符分隔的名称。

相关内容