2012-12-18 12 views
14

Kiedy próbuję kompresować pliki i katalogi przy pomocy tar przy użyciu ścieżek bezwzględnych, ścieżka bezwzględna jest zachowywana w wynikowym skompresowanym pliku. Potrzebuję użyć bezwzględnych ścieżek, aby powiedzieć tar, gdzie znajduje się folder, który chcę skompresować, ale chcę tylko, aby skompresował ten folder, a nie całą ścieżkę.Unix tar: nie zachowuj struktury katalogów

Na przykład tar -cvzf test.tar.gz /home/path/test - gdzie chcę skompresować folder test. Jednak to, co faktycznie kompresuję, to /home/path/test. Czy jest coś, co można zrobić, aby tego uniknąć? Próbowałem grać z operandem -C bezskutecznie.

+0

Czy istnieje kontekst programistyczny do tego? Jeśli nie, prawdopodobnie należy na Unix.SE zamiast Stack Overflow. – dmckee

+0

prawda, chociaż może to mieć znaczenie w pisaniu skoroszytów, nie jest oznaczane jako takie .. –

+0

Używam go do skryptu powłoki, ale zmniejszyłem problem do jednego poza kontekstem. Być może musiałem podać dodatkowe szczegóły (inaczej kontekst), aby znaleźć rozwiązanie, dlatego napisałem tutaj. Oznaczę to teraz jako takie. –

Odpowiedz

17

Zastosowanie -C określić katalog z którego pliki wyglądać chcesz, a następnie określić pliki, jak wynika z tego katalogu:

tar -cvzf test.tar.gz -C /home/path test 
+1

To nadal zachowuje strukturę katalogów * względną * do określonego katalogu głównego, co nie jest tym, o co pyta (ale jest najwyraźniej tym, czego potrzebował OP), ale +1 ponieważ tego właśnie szukałem (a jednostronne spłaszczanie w drugiej odpowiedzi wydaje się być dziwaczne). –

23

To jest brzydki ... ale to działa ...

Miałem ten sam problem, ale z wieloma folderami, chciałem tylko wyrównać wszystkie pliki. Możesz użyć opcji "transform", aby przekazać wyrażenie sed i ... działa zgodnie z oczekiwaniami.

to wyrażenie:

's/.*\///g' (usunąć wszystko przed '/')

To jest ostateczna komenda:

tar --transform 's/.*\///g' -zcvf tarballName.tgz */*/*.info 
+5

To jedyna odpowiedź, jaką widziałem, że * faktycznie * robi to, czego szukam. –

+0

Lepszy wynik dla wielu katalogów można uzyskać w połączeniu z http://serverfault.com/a/566345/343194. Coś jak "znajdź ./commondir -type f | tar --transform 's /.*\/// g' -cvzf ./file.tar.gz --files-from =/dev/stdin'. W ten sposób puste katalogi potomne zostaną wykluczone. –

0

multi-katalog przykład

smoła cvzf mój .tar.gz example.zip -C dir1 files_under_dir1 -C dir2 files_under_dir2

pliki w katalogu dir 1/2 nie powinny mieć ścieżki.

Powiązane problemy