apt - 如何从包中获取仅文件(而不是目录)的列表?

・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



但这只给了当前目录中的文件。

通过xargsdpkg输出输出到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 )




讨论
Tianye profile image