Используя 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
с xargs
также не позволяет мне отфильтровывать каталоги.
Просто переберите каждую строку в dpkg -L elixir
и проверьте, является ли линия путем к обычному файлу , а затем echo
это:
while read f; do [ -f "$f" ] && echo "$f"; done < <(dpkg -L elixir)
Ваша идея с помощью [ 113] выглядит хорошо, но find
, так что здесь не тот инструмент.
Другим вариантом было бы сравнить выходные данные dpkg
с результатами find
для файлов:
comm -12 \
<(dpkg -L kate | sort ) \
<(find $( dpkg -L kate ) -maxdepth 1 -type f | sort )
Это должно быть возможно с xargs
и тестом оболочки, например,
dpkg -L elixir | xargs sh -c 'for f; do [ -d "$f" ] || echo "$f"; done'
. С остротой жемчуга:
dpkg -L elixir | perl -nE 'chomp; say unless -d'
dpkg -L
перечислит все файлы/каталоги в пакете и произведет его к stdoutperl -nE
выполнит итерации следующего кода жемчуга по каждой строке dpkg
вывод, оставляя текущую строку в переменной параметра по умолчанию (названной $_
)chomp
удаляет запаздывание перевода строки из stdin, таким образом оставляя только имя файла в переменной параметра по умолчанию ($_
). say
коротко для say $_
, который распечатает к stdout параметру по умолчанию, если следующее условие будет верно.unless -d
(короткий для unless -d $_
) условие для предыдущего say
, и средства, это только будет верно, если указанное имя файла не будет каталогомТак, это отобразит все имена файлов, которые не являются каталогами. Если бы Вы хотели отобразить только каталоги, то Вы заменили бы unless
с if
. Или если бы Вы хотели только символьные ссылки, то Вы могли бы использовать -l
вместо -d
, и т.д. (см. man perlfunc
для получения дополнительной информации)