如何查找文件并同时查看文件的大小?错误:我尝试了此命令,但只获得了其他文件的大小和详细信息。
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
传输到 输入到ls
。 ls
不会从 STDIN 读取任何输入,因此输出从find
只是被丢弃,然后ls
像往常一样列出当前目录的内容。
答案3
其他答案已经指出
但是,第一种方法和第二种方法不能给出ls -l
(-ls
标志等于ls -dils
) 的准确输出,第三种方法需要额外xargs
调用。借助标志,-exec
可以ls -l
直接从调用find
:
find -name "*.conf" -exec ls -l {} +
这将把整个文件名列表作为参数,ls -l
并根据需要多次调用它。
如果你只想匹配.conf
当前目录下所有以 结尾的文件(并且ARG_MAX
没问题!) find
你实际上根本不需要。相反,你可以使用bash
的 glob 匹配和globstar
shelldotglob
选项,如下所示 - 同样明智地不要在文件名的换行符上中断,并匹配“隐藏”文件,例如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
打印由空字节而不是换行符分隔的名称。