用“find”找到一个文件并显示文件的大小

5 command-line files find

如何在查找文件的同时查看文件的大小?错误:我试过这个命令,但我只得到了其他文件的大小和详细信息。

find -name "*.conf" | ls -l
Run Code Online (Sandbox Code Playgroud)

Lie*_*tok 13

find有一个-ls选项。所以你的命令应该是这样的:

find -name '*.conf' -ls
Run Code Online (Sandbox Code Playgroud)


Dig*_*uma 7

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

find -name "*.conf" -printf "%s %p\n"
Run Code Online (Sandbox Code Playgroud)

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


作为记录,您的问题中显示的尝试不起作用,因为您正在尝试将输出从find输入到ls. ls不读取来自 STDIN 的任何输入,因此输出从 STDINfind被简单地丢弃,然后ls像往常一样列出当前目录的内容。


des*_*ert 6

\n\n

其他答案已经指出了

\n\n
    \n
  1. 如何find仅使用打印文件大小-printf
  2. \n
  3. 如何仅使用获得ls输出find-ls
  4. \n
  5. 如何正确地将find\ 的输出传输到另一个程序xargs
  6. \n
\n\n

然而,第一种和第二种方法 don\xe2\x80\x99t 给出ls -l(-ls标志等于ls -dils) 的精确输出,第三种方法需要额外的xargs调用。在标志的帮助下,可以直接从-exec\xe2\x80\x99调用:ls -lfind

\n\n
find -name "*.conf" -exec ls -l {} +\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
\n\n

如果您只想匹配以.conf当前目录及其下结尾的每个文件(并且ARG_MAX\xe2\x80\x99t 不是问题!), 则实际上根本不需要 \xe2\x80\x99tfind。相反,您可以使用bash\xe2\x80\x99s 与globstardotglobshell 选项匹配,如下所示 \xe2\x80\x93 it\xe2\x80\x99s 同样明智,不会在文件名中的换行符上中断并匹配 \xe2\x80\ x9chidden\xe2\x80\x9d 文件,例如find

\n\n
$ shopt -s globstar dotglob\n$ ls -l **/*.conf\n
Run Code Online (Sandbox Code Playgroud)\n