根据文件属性过滤文件列表

bol*_*lov 5 shell grep find

find您可以通过文件属性进行搜索-type,例如-executable等。

如何从现有文件列表中实现类似的功能?例如 的输出dpkg -L <package_name>

管道 tols -ldfilethen togrep既不精确也不正确。

我认为awk可以用来解析 的输出ls -ld以获得准确的结果,但这似乎过于复杂并且不是真正的通用解决方案。最好的情况是find它本身可以用于此目的。

Rob*_*rtL 1

尝试:

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