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

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.


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.

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.