apt - 如何从包中获取仅文件(而不是目录)的列表?
Tianye
・2 分钟阅读
问题
使用 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
但这只给了当前目录中的文件。
通过xargs
将dpkg
输出输出到ls
似乎还不允许我过滤目录。
回答1
简单地循环每行dpkg -L elixir
,并且测试行是否是常规文件的路径,然后是echo
:
while read f; do [ -f"$f" ] && echo"$f"; done < <(dpkg -L elixir)
你用find的想法看起来不错,但是,find
- 不接受stdin
- 当你想要检查单个给定路径的属性时,在给定路径中搜索,
所以这不是正确的工具。
回答2
应该可以使用xargs
加shell测试,例如,
dpkg -L elixir | xargs sh -c 'for f; do [ -d"$f" ] || echo"$f"; done'
回答3:
另一个选项是将dpkg
的输出与文件的find
结果进行比较:
comm -12
<(dpkg -L kate | sort )
<(find $( dpkg -L kate ) -maxdepth 1 -type f | sort )