У меня есть много файлов в каталоге. у каждых из них есть совсем другое имя:
one.tar.gz
juk.tar.gz
cv.tar.gz
erf.tar.gz
vcx.tar.gz
cxcd.tar.gz
vc.tar.gz
jkjk.tar.gz
zxc.tar.gz
asd.tar.gz
ghj.tar.gz
kll.tar.gz
qwe.tar.gz
Извлечение один за другим является очень трудоемким. Таким образом, я хочу извлечь весь тот файлы с помощью одной команды. Я попробовал tar -xzf *
но не работы
Используя find
заклинание:
find . -maxdepth 1 -type f -iname '*.tar.gz' -exec tar xzf '{}' \;
Это ожидало не работать как tar -xzf *.tar.gz
расширится в Вашем случае до tar -xzf one.tar.gz juk.tar.gz cv.tar.gz ...
Что означает gunzip one.tar.gz
и извлечение из него файлы называют juk.tar.gz
, cv.tar.gz
, и т.д. Это ясно не, что Вы хотите.
Необходимо сделать цикл на всех tar.gz файлах для извлечения их.
Например:
for f in *.tar.gz ; do tar -xzf $f ; done
goreSplatter's - то, что я сделал бы, но между тем вот правильная форма для версии цикла:
for tarball in *.tar.gz ; do
tar xzf "$tarball"
done
-
) символ, для мобильности.z
так как это автоматически обнаруживает компрессионный тип.Другой решения мог быть:
cat *.tar.gz | tar xvf - -ignore-blocks
Но это - ошибка из синтаксического анализатора tar (согласно 1), Таким образом, лучше использовать:
cat *.tar.gz | tar xvf - --ignore-zeros --listed-incremental=noreblocks
Или непосредственно (тот я использую):
cat *.tar.gz | tar tvf - --ignore-zeros
Exemple: [a-c] .tar файлы являются тем же.
me@herpes:/tmp/test$ ls -1
aa.tar
a.tar
bb.tar
b.tar
cc.tar
c.tar
me@herpes:/tmp/test$ cat * | tar tf - --ignore-zeros
a1
a2
stopbroker
startbroker
b1
b2
stopbroker
startbroker
c1
c2
stopbroker
startbroker
me@herpes:/tmp/test$ for i in *; do tar tf $i;done
a1
a2
stopbroker
startbroker
b1
b2
stopbroker
startbroker
c1
c2
stopbroker
startbroker