unzip
ma fajną opcję -j
, dzięki której struktura katalogów archiwum jest odrzucana, a wszystkie pliki są wyodrębniane do tego samego katalogu.
Czy istnieje sposób na wykonanie tar
pracy w ten sam sposób? Nic na stronie podręcznika nie wskazuje na to.
Czy istnieje zatem alternatywne, najlepiej Wolne Oprogramowanie, narzędzie, które to zrobi?
Odpowiedzi:
Smoła GNU żyje na zapalenie Featuritis, więc naturalnie ma też na to kilka opcji.
http://www.gnu.org/software/tar/manual/html_node/transform.html
Jeśli chcesz po prostu usunąć kilka segmentów ścieżki, wówczas
--strip-components=n
lub--strip=n
często:Możliwe jest także ponowne zapisanie plików do wyodrębnienia (flagi są
--transform
lub--xform
akceptują ereg za pomocą/x
modifer):Aby wyświetlić tar, potrzebujesz dodatkowej
--show-transformed
opcji:Wierzę, że opcje przepisywania działają również do pakowania, a nie tylko do rozpakowywania. Ale
pax
ma oczywiście ładniejszą składnię.źródło
s#.*/##
?--strip
nie wspomniany na stronie podręcznika systemu os x tar, ale i tak działa, dzięki!--strip
i--strip-components
?Możesz to zrobić dość łatwo w dwóch krokach. Dostosuj w razie potrzeby:
źródło
find -exec mv -i
zamiastfind | xargs
) .... proste kroki, które mogę powtórzyć w dowolnym systemie bez konieczności noszenia ze sobą skryptu, aby to dla mnie zrobić.tmpdir=$( mktemp -d )
przydaje się przy tworzeniu tymczasowych katalogówpax
mogę to zrobić:lub
Możesz najpierw sprawdzić operację zamiany nazwy, pomijając
-r
opcję.źródło
Możliwe rozwiązanie, które nie wymaga instalowania niczego.
tar tvf
aby pobrać wszystkie pliki z archiwumWyodrębnij te pliki osobno - wypakuj tar na standardowe wyjście i przekieruj na $ filename
zapisz jako extract.sh i uruchom jako
extract.sh myfile.tar
. Zastąpi także wszelkie zduplikowane nazwy plików napotkane w katalogach pobranych z tarballa.źródło
-O
Opcja wypakowuje plik na standardowe wyjście i>
przekierowania, że wyjście do pliku. Więc w moim przykładzie wypakowuję foo.mp3 i przekierowuję go do bar.mp3. Nazwy plików są dowolne.źródło