Legen Sie tar'd-Dateien in einem Unterverzeichnis ab

8

Ich habe ein Verzeichnis wie folgt eingerichtet:

folder_x
file.y
file.z

Ich möchte eine TAR-Datei erstellen, damit die Struktur beim Extrahieren ungefähr so ​​aussieht:

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

Wie könnte ich das zum Laufen bringen tar? Als Referenz ist der aktuelle Befehl, den ich verwende:

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

quelle

Antworten:

9

Ich habe die Option --transform noch nie verwendet, aber ich nehme an, sie würde das tun, was Sie brauchen:

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

Verwirklichen Sie die Verwendung von ,anstelle von /als Trennzeichen, damit wir einen abschließenden Schrägstrich hinzufügen können.

Marnix A. van Ammers
quelle
Hmm, es scheint nicht richtig zu sein: file.z-> dirfile.zund dirfolder_x. Ich werde auch mit dem regulären Ausdruck herumspielen und sehen, ob ich ihn so bekommen kann, wie ich es will.
1
So mache ich das: tar -czf archive.tar.gz --transform 's, ^, dir_q /,' file.y file.z folder_x Sed ermöglicht anstelle von / die Vermeidung von Mehrdeutigkeiten, wenn Schrägstriche in Ihrem Ausdruck vorhanden sind . Normalerweise würde ich sagen, dass Sie dem Schrägstrich mit einem Backslash entkommen können, aber sed (zumindest gnu sed) interpretiert ihn nicht richtig.
JDB
tar --transform scheint unter MacOS nicht zu funktionieren
Alexander Mills
In MacOS können Sie macports und gnutar installieren, um die Option --transform zu erhalten. Oder laden Sie gnutar selbst herunter und kompilieren Sie es.
Marnix A. van Ammers
1

Wenn es Ihnen nichts ausmacht, das neue Verzeichnis zu erstellen ...

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

Alternativ können Sie ein neues Verzeichnis erstellen, die Datei in dieses Verzeichnis entpacken und dann aus dem übergeordneten Verzeichnis erneut tarieren, um den Namen in die extrahierte Version aufzunehmen. Auf diese Weise müssen Sie sich nicht an einen super langen Aufruf erinnern.

John T.
quelle