Jak wyodrębnić konkretny katalog z tarballa? i usunąć wiodący katalog?


12

Chcę wyodrębnić konkretny katalog z archiwum wordpress. specjalnie wp-includesdla .. Wygląda na to, że struktura katalogów wewnątrz archiwum jest, wordpress/wp-includesale potrzebuję ./wp-includesgo po wyodrębnieniu, bez wiodącego katalogu Wordpress. Jak mam to zrobić?

Odpowiedzi:


13

Aby wyodrębnić określony katalog (i jego zawartość, rekurencyjnie), wystarczy przekazać go jako dodatkowy argument w wierszu poleceń. Za pomocą GNU tar możesz usunąć główny katalog z --strip-componentsopcją (i bardziej ogólnie przekształcić nazwy plików za pomocą --transform). W systemach innych niż Linux możesz użyć pax (jest w POSIX, ale niektóre dystrybucje Linuksa pomijają go podczas domyślnej instalacji) i jego -sopcję.

tar xf foo.tar --strip-components=1 wordpress/wp-includes  #GNU tar
pax -r <foo.tar -pp -s '!^wordpress/!!' wordpress/wp-includes

Możesz scalić listę dołączania z regułami przepisywania, dodając regułę, aby przepisać wszystko do pustej nazwy (co oznacza „nie wypakowuj”; reguła ma zastosowanie tylko wtedy, gdy poprzednie reguły nie pasowały).

pax -r <foo.tar -pp -s '!^wordpress/\(wp-includes/\)!\1!' -s !.*!!

5

Zakładając, że masz tarę GNU, możesz użyć --strip-components:

$ tar xaf tarball.tar.gz --strip=1 wordpress/wp-includes

Wierzę, że obecne wersje tar BSD również obsługują --strip-components. W najgorszym przypadku możesz zrobić:

$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress

Skończyło się na tym drugim tylko dlatego, że się spieszy, ale dobrze wiedzieć, że ten pierwszy istnieje.
— Xenoterracide

Czy byłoby możliwe użycie polecenia, które nie wymaga jawnego nazwania usuniętego komponentu (np. wordpress)? Potrzebuję tego podczas wyodrębniania utworzonych przez GitHub plików archiwalnych, które zawierają wersję git w usuniętym komponencie, którego nie znam z góry.
— tjanez,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.