unzip
имеет изящную опцию -j
, посредством чего структура каталогов архива отбрасывается, и все файлы извлечены в тот же каталог.
Есть ли способ сделать tar
работа таким же образом? Ничто в странице справочника, кажется, не указывает так.
Так, есть ли альтернатива, предпочтительно Бесплатное программное обеспечение, инструмент, который сделает это?
Можно сделать это довольно легко на двух шагах. Адаптируйтесь по мере необходимости:
$ mkdir /tmp/dirtree
$ tar xfz /path/to/archive -C /tmp/dirtree
$ find /tmp/dirtree -type f -exec mv -i {} . \;
$ rm -rf /tmp/dirtree
Возможное решение, которое не требует установки ничего.
tar tvf
захватить все файлы от tarballИзвлеките те файлы индивидуально - имеют извлечение 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.