Только файлы списка tar

Удовлетворительный факт: если вы используете Archive Manager и извлекаете .tar.gz, так что у вас есть «Keep directory structure» unticked, вы получите tarbomb .

tar -ztf перечисляет все файлы и каталоги в файле tar. Есть ли способ перечислить все файлы в файле tar без структуры каталогов?

Я не вижу способа сделать это с man-страницы, но вы всегда можете фильтровать результаты. В именах файлов не предполагается новых строк:

 tar tzf your_archive | awk -F/ '{ if($NF != "") print $NF }' 

Как это работает

Установив разделитель полей в / , последнее поле awk знает ( $NF ), либо имя файла, если оно обрабатывает имя файла, либо пустое, если оно обрабатывает имя каталога ( tar добавляет конечную косую черту в имена каталогов). Итак, мы в основном говорим awk чтобы напечатать последнее поле, если оно не пустое.

Предполагая, что ни одно из имен файлов не содержит строк новой строки:

 tar -tf foo.tar | sed -e 's#.*/##' -e '\#.#!d' 

Первая команда sed удаляет все до последней / в строке, так что печатается только часть имени файла. Вторая команда удаляет строки, которые теперь пусты, т.е. строки, которые заканчиваются в / , которые являются каталогами.

Используя предложение Джозефа Р., вы можете использовать regex [^/]$ для grep для файлов, ища строки, не заканчивающиеся на / .

tar tzf archive.tar.gz | grep -e "[^/]$"