tar – извлечение, отбрасывающее структуру каталогов

unzip имеет изящную опцию -j, посредством чего структура каталогов архива отбрасывается, и все файлы извлечены в тот же каталог.

Есть ли способ сделать tar работа таким же образом? Ничто в странице справочника, кажется, не указывает так.

Так, есть ли альтернатива, предпочтительно Бесплатное программное обеспечение, инструмент, который сделает это?

34
задан 26.10.2011, 17:53

3 ответа

Можно сделать это довольно легко на двух шагах. Адаптируйтесь по мере необходимости:

$ mkdir /tmp/dirtree
$ tar xfz /path/to/archive -C /tmp/dirtree
$ find /tmp/dirtree -type f -exec mv -i {} . \;
$ rm -rf /tmp/dirtree
13
ответ дан 07.12.2019, 09:02

Возможное решение, которое не требует установки ничего.

  1. используйте a tar tvf захватить все файлы от tarball
  2. Извлеките те файлы индивидуально - имеют извлечение tar к stdout и перенаправление к $filename

    tar -tvf $1 | grep -v "^d" | \
                  awk '{for(i=6;i<NF+1;i++) {printf "%s ",$i};print ""}' |\
                  while read filename
                  do
                     tar -O -xf $1 "$filename" > `basename "$filename"`
                  done
    

сохраните как extract.sh и работайте как extract.sh myfile.tar. Это также перезапишет любые дублирующиеся имена файлов, с которыми встречаются в каталогах, которые вытягивают от tarball.

1
ответ дан 07.12.2019, 09:02

pax может сделать это:

pax -v -r -s '/.*\///p' < archive.tar

или

zcat archive.tar.gz | pax -v -r -s '/.*\///p'

Можно проверить заменяющую операцию имени сначала путем исключения -r опция.

8
ответ дан 07.12.2019, 09:02

Теги

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