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

Если только продвижение пробелов должно быть преобразовано:

sed 'h;s/[^ ].*//;s/    /  /g;G;s/\n *//'

С комментариями:

sed '
  h; # save a copy of the pattern space (filled with the current line)
     # onto the hold space
  s/[^ ].*//; # remove everything starting with the first non-space
              # from the pattern space. That leaves the leading space
              # characters
  s/    /  /g; # substitute every sequence of 4 spaces with 2.
  G; # append a newline and the hold space (the saved original line) to
     # the pattern space.
  s/\n *//; # remove that newline and the indentation of the original
            # line that follows it'

Также взгляд на энергию 'ts' установка и :retab команда

16
15.11.2013, 15:20
4 ответа

Я не вижу способ сделать это из страницы справочника, но можно всегда фильтровать результаты. Следующее не принимает новых строк в Ваших именах файлов:

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

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

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

17
27.01.2020, 19:48
  • 1
    Довольно хорошая работа с awk :) –  Eero Aaltonen 15.11.2013, 15:37

Принятие ни одних из имен файлов содержит новые строки:

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

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

4
27.01.2020, 19:48
  • 1
    sed: выражение № 2-e, символ 2: неизвестная команда: '/' и sed синтаксис не чувствует очень.. интуитивный –  Eero Aaltonen 20.11.2013, 14:44
  • 2
    @EeroAaltonen я зафиксировал команду sed. Действительно, синтаксис является несколько загадочным (я действительно включаю объяснения в свой ответ). –  Gilles 'SO- stop being evil' 20.11.2013, 14:56

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

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

5
27.01.2020, 19:48

Сpax(командой POSIX для чтения tarфайлов):

pax -'s@.*/@@' < file.tar

(, в котором перечислены все файлы независимо от их типа, включая каталоги ).

2
27.01.2020, 19:48

Теги

Похожие вопросы