我正在执行一个 find 命令来显示特定扩展名的文件,例如:
find $directory -type f -name "*.vm"
不过我希望能够看到文件权限(如 ls -l 显示的一样)。
如何才能做到这一点?
答案1
GNUfind
有一个-ls
指令可供使用。它的输出格式与 非常接近但不完全匹配ls -l
。
如果没有指定 find 的默认操作,则-print
只会打印找到的文件名和路径。如果添加(或替换-print
为)-ls
,则会得到更详细的列表。
如果您出于某种原因想要某种特定格式,-printf
这就是您想要的。例如,尝试以下操作:
find . -printf "%M %n %8.8u %8.8g %8.8s %Ax %AX %p\n"
大致复制ls -l
输出格式。(使用不同的日期格式;可能也可以复制 ls 的行为;有关find
可用格式说明符的详细信息以及printf(3)
数字的作用的详细信息,请参阅手册页。)
一般来说,你想避免如果可以的话使用-exec
,如果必须使用 -exec,你想尝试使用+
而不是{}
在一次调用中提供多个文件名。否则,该命令将对每个符合条件的文件执行一次,如果文件数量很大,则会导致严重的性能损失。
还要注意,如果您不需要递归行为,最简单的解决方案可能就是首先使用 ls:ls -ld $directory/*.vm
答案2
您可以指定-ls
选项find
。或者,如果您需要特定格式,请使用-exec
:
find "$directory" -type f -name '*.vm' -exec ls -l {} \;