Zastanawiałem się, czy (i oczywiście w jaki sposób) można powiedzieć, tar
aby wyodrębnić wiele plików za jednym razem.
Jestem doświadczonym użytkownikiem systemu Unix od kilku lat i oczywiście wiem, że możesz użyć for
lub find
coś takiego, aby zadzwonić tar
raz dla każdego archiwum, które chcesz wyodrębnić, ale nie mogłem znaleźć działającego wiersza polecenia, który spowodował tar
wyodrębnić dwa pliki .tar.gz jednocześnie. (I nie, nie ma w tym nic złego for
, ja tylko pytam, czy da się obejść.)
Być może zadaję to pytanie raczej z ciekawości
- istnieje dziwny rozwidlenie
tar
gdzieś, który to obsługuje - ktoś wie, jak użyć
-M
parametru, którytar
zasugerował mi, kiedy próbowałemtar -zxv -f a.tgz -f b.tgz
- wszyscy jesteśmy ślepi i to zupełnie łatwe do zrobienia - ale nie mogłem znaleźć żadnego śladu w sieci, które nie wykorzystują
for
lubfind
lubxargs
lub podobne.
Proszę nie odpowiadać za pomocą tar -zxvf *.tar.gz
(ponieważ to nie działa) i odpowiadać tylko „nie działa”, jeśli jesteś absolutnie pewien (i być może masz też dobre wyjaśnienie dlaczego ).
Edycja: Wskazano mi odpowiedź na to pytanie na Stack Overflow, która mówi bardzo szczegółowo, że nie jest to możliwe bez zerwania z bieżącą tar
składnią, ale nie sądzę, żeby to była prawda. Używanie tar -zxv -f a.tgz -f b.tgz
lub tar -zxv --all-args-are-archives *.tar.gz
łamanie żadnej istniejącej składni, imho.
-M
parametrem.Odpowiedzi:
Jest to możliwe, składnia jest dość łatwa:
Opcja -i ignoruje EOF na końcu archiwów tar ze strony man:
źródło
cat *.tar.bz2 | tar -ixjv
. Dzięki!dla * .tar.gz
dla * .tar.bz2
dla * .tar.xz
źródło
$file
jeśli twoje pliki mają nazwy ze spacjami.Musisz użyć pętli. To by nie złamało
tar
składni wiersza poleceń, aby umożliwić wiele-f
opcji, ale wymagałoby to dodania kodu w celu przetworzenia kilku archiwów w sekwencji, z wszelkiego rodzaju warunkami brzegowymi (Co się stanie, jeśli archiwum w środku jest zniekształcone? Czy archiwa mogą używać różnych mechanizmy kompresji? Czy możesz mieć wiele-C
opcji (opcja tar GNU, aby wyodrębnić do określonego katalogu)? Co powiesz na -K (opcja tar GNU, aby rozpocząć od określonej nazwy członka)?…).Jedną z możliwości uniknięcia
for
pętli jest instalacja i aktywacja AVFS , systemu plików FUSE, który zapewnia przejrzysty dostęp do archiwów. Każde archiwum/path/to/archive
pełni również funkcję katalogu~/.avfs/path/to/archive#
. Jeśli chcesz dopasować archiwa za pomocą symboli wieloznacznych, trudność polega na dodaniu tego#
do dopasowania symboli wieloznacznych; można to zrobić w Zsh.źródło
find . -name "*.tar.gz" -exec tar xzf {} \;
źródło