it-swarm.com.de

Wie kann ich absolute Pfade für tar ausschließen?

Ich führe ein PHP -Skript aus, das mir die absoluten Pfade der Dateien gibt, die ich tarieren möchte. Dies ist die Syntax, die ich habe:

tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls

Wenn ich sie entpacke, wird der absolute Pfad zu den Dateien erstellt. Wie bekomme ich nur /path mit allem darunter?

35
Angel S. Moreno

Wenn Sie die ersten n führenden Komponenten des Dateinamens entfernen möchten, benötigen Sie strip-components. Also in Ihrem Fall auf Extraktion

tar xvf tarname.tar --strip-components=2

Die man-Seite hat eine Liste der vielen Optionen von tar, einschließlich dieser. Einige frühere Versionen von tar verwenden stattdessen --strip-path für diesen Vorgang.

50
ire_and_curses

Sie verwenden falsch den -C-Schalter, der zum Wechseln von Verzeichnissen verwendet wird. Was Sie also tun müssen, ist:

tar -cf tarname.tar -C /www/path path/file1.txt path2/path3/file2.xls

oder wenn Sie alles unter /www/path packen möchten:

tar -cf tarname.tar -C /www/path .

Sie können -C switch mehrfach verwenden.

51
Johnny Baloney

Für mich funktioniert das Folgende am besten:

tar xvf some.tar --transform 's?.*/??g'

Das --transform-Argument ist ein Ersatz-Regex für sed, dem jeder extrahierte Dateipfad zugeführt wird. Im Gegensatz zu --strip-components werden alle Pfadinformationen entfernt, nicht nur eine feste Anzahl von Komponenten.

10
Roman Saveljev

Wenn Sie nicht wissen, wie viele Komponenten sich im Pfad befinden, können Sie Folgendes versuchen:

DIR_TO_PACK=/www/path/
cd $DIR_TO_PACK/..
tar -cf tarname.tar $(basename $DIR_TO_PACK)
0