find
您可以通过文件属性进行搜索-type
,例如-executable
等。
如何从现有文件列表中实现类似的功能?例如 的输出dpkg -L <package_name>
。
管道 tols -ld
或file
then togrep
既不精确也不正确。
我认为awk
可以用来解析 的输出ls -ld
以获得准确的结果,但这似乎过于复杂并且不是真正的通用解决方案。最好的情况是find
它本身可以用于此目的。
尝试:
stat --printf="'%n' is a %F\n" $(dpkg -L grep)
Run Code Online (Sandbox Code Playgroud)
如果您只想显示目录,您可以这样做:
stat --printf="'%n' is a %F\n" $(dpkg -L grep) | grep ' is a directory$'
Run Code Online (Sandbox Code Playgroud)
或者
for f in $(dpkg -L grep)
do
operms=$(stat --format='0%a' "$f")
if [ $(( $operms & 0111 )) -ne 0 ]
then
echo "$f: executable";
fi
done
Run Code Online (Sandbox Code Playgroud)
可能性是无止境!
我认为前两种形式通常更理想,因为它们只启动两个进程;然而,循环为每个文件for
启动一个进程。stat
请参阅stat
手册第 1 节中的手册页,了解可以通过这种方式访问的所有属性。
感谢@Jeff-Schaller 的提及stat
。