Umieść pliki tar w podkatalogu

8

Mam konfigurację katalogu podobną do następującej:

folder_x
file.y
file.z

Chciałbym utworzyć plik tar, aby po rozpakowaniu struktura wyglądała mniej więcej tak:

dir_q/folder_x
dir_q/file.y
dir_q/file.z

Jak mogę to uruchomić za pomocą tar? Dla porównania, bieżące polecenie, którego używam to:

tar -czf archive.tar.gz file.y file.z folder_x

źródło

Odpowiedzi:

9

Nigdy nie korzystałem z opcji --transform, ale wydaje mi się, że zrobiłby to, czego potrzebujesz:

tar -czf archive.tar.gz --transform 's,^,dir_q/,' file.y file.z folder_x

Zdaj sobie sprawę z użycia ,zamiast /jako separatora, abyśmy mogli dodać końcowy ukośnik.

Marnix A. van Ammers
źródło
Hmm, wydaje się, że nie robi tego poprawnie: file.z-> dirfile.zi dirfolder_x. Pobawię się też z wyrażeniem regularnym, aby zobaczyć, czy mogę uzyskać to tak, jak chcę.
1
Oto jak to robię: tar -czf archive.tar.gz --transform 's, ^, dir_q /,' file.y file.z folder_x Sed pozwala, zamiast /, unikanie dwuznaczności, gdy w wyrażeniu występują ukośniki . Normalnie powiedziałbym, że możesz uciec przed ukośnikiem odwrotnym ukośnikiem, ale sed (przynajmniej gnu sed) nie interpretuje go poprawnie.
jdb
tar --transform nie działa na MacOS
Alexander Mills
W MacOS możesz zainstalować macports i gnutar, aby uzyskać opcję --transform. Lub sam pobierz i skompiluj gnutar.
Marnix A. van Ammers
1

Jeśli nie masz nic przeciwko utworzeniu nowego katalogu ...

mkdir dir_q; tar -C $ _ -xzvf archive.tar.gz

możesz też utworzyć nowy katalog, rozpakować plik do tego katalogu, a następnie ponownie tar go z katalogu nadrzędnego, aby dołączyć jego nazwę do wyodrębnionej wersji. W ten sposób nie musisz pamiętać o bardzo długim wywołaniu.

John T.
źródło