使用dpkg -L <package name>
我可以获取包中所有文件的列表,但它也包含我想排除的目录列表。
例如:
dpkg -L elixir
给我:
/.
/usr
/usr/bin
/usr/lib
/usr/lib/elixir
/usr/lib/elixir/bin
/usr/lib/elixir/bin/elixir
/usr/lib/elixir/bin/elixirc
/usr/lib/elixir/bin/iex
/usr/lib/elixir/bin/mix
/usr/lib/elixir/lib
/usr/lib/elixir/lib/eex
/usr/lib/elixir/lib/eex/ebin
/usr/lib/elixir/lib/eex/ebin/Elixir.EEx.Compiler.beam
(etc...)
我尝试使用以下命令排除目录:
dpkg -L elixir | find -maxdepth 1 -not -type d
但这仅提供当前目录中的文件。
通过管道将输出传输dpkg
到ls
withxargs
似乎也不允许我过滤掉目录。
答案1
答案2
xargs
例如,应该可以加上一个 shell 测试
dpkg -L elixir | xargs sh -c 'for f; do [ -d "$f" ] || echo "$f"; done'
答案3
使用 perl 单行命令:
dpkg -L elixir | perl -nE 'chomp; say unless -d'
dpkg -L
将列出包中的所有文件/目录并将其输出到标准输出perl -nE
将在输出的每一行上迭代以下 perl 代码dpkg
,将当前行保留在默认参数变量中(称为$_
)chomp
删除尾随换行符标准输入,因此在默认参数变量中只留下文件名($_
)。say
是缩写say $_
,它将打印到标准输出如果以下条件为真,则使用默认参数。unless -d
(的缩写unless -d $_
)是前一个的条件say
,意味着只有当指定的文件名不是目录
因此,它将显示所有非目录的文件名。如果您只想显示目录,则可以用 替换unless
。if
或者,如果您只想要符号链接,则可以用 代替-l
等-d
。(man perlfunc
有关更多详细信息,请参阅)
答案4
另一种选择是将的输出与文件dpkg
的结果进行比较:find
comm -12 \
<(dpkg -L kate | sort ) \
<(find $( dpkg -L kate ) -maxdepth 1 -type f | sort )