Ubuntu – How to get a list of only the files (not the directories) from a package

aptcommand linedpkgfind

Using dpkg -L <package name> I am able to obtain a list of all the files from a package, but it contains a list of directories as well, which I want to exclude.

So, for example:

dpkg -L elixir

gives me:

/.
/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...)

I have tried excluding the directories with the following:

dpkg -L elixir |  find  -maxdepth 1 -not -type d

But that just gives the file in the current directory.

Piping the dpkg output to ls with xargs also does not seem to allow me to filter out directories.

Best Answer

Simply loop over each line of dpkg -L elixir and test whether the line is the path of a regular file, then echo it:

while read f; do [ -f "$f" ] && echo "$f"; done < <(dpkg -L elixir)

Your idea with find looks good but find

  1. does not accept stdin and
  2. searches in the given path while you want to just check properties of the single given path,

so it’s not the right tool here.

Related Question