Wie tariere ich ein Verzeichnis, ohne die Verzeichnisstruktur beizubehalten?


80

Ich arbeite an einem Sicherungsskript und möchte ein Dateiverzeichnis tarieren:

tar czf ~/backup.tgz /home/username/drupal/sites/default/files

Dies tart es auf, aber wenn ich die resultierende Datei entpacke, enthält es die vollständige Dateistruktur: Die Dateien sind in home/username/drupal/sites/default/files.

Gibt es eine Möglichkeit, die übergeordneten Verzeichnisse auszuschließen, sodass der resultierende Tar nur das letzte Verzeichnis ( files) kennt ?

Antworten:


35
cd /home/username/drupal/sites/default/files
tar czf ~/backup.tgz *

19
Sie können auch die Option -C von tar verwenden.
— GuruM

8
CD wird nicht empfohlen und ist fehleranfällig, z. B. große Skripte oder Makefiles. Die folgende Antwort ist allgemeiner verwendbar und korrekt.
— Gregor

Versucht -Cund --directoryhat bei Ubuntu 16.04 nicht funktioniert. Dies ist nur eine Option, die funktioniert.
— Haxpor

Dies ist die einzige Option, die funktioniert. -C add a. Stammordner, was wir nicht wollen.
— Nicolas Dorier

164

Verwenden Sie die Option --directory:

 tar czf ~/backup.tgz --directory=/home/username/drupal/sites/default files 

1
Was ist, wenn ich hier 2 Verzeichnisse einfügen möchte?
— Shanpei Zhou

@ user3352668 einfach zwei Verzeichnisse hinzufügen. Wenn die Standardeinstellung beispielsweise "files" und "morefiles" enthält, fügen Sie einfach "morefiles" zur Zeichenfolge von nbt hinzu. Übrigens: Die beste Lösung ist die von nbt, sollte die akzeptierte Antwort sein
— Anonym

4
-C DIR ist das gleiche wie --directory = DIR , ändert das Verzeichnis in DIR
— Markus

1
Ich dachte nur, ich würde erwähnen, dass die Reihenfolge hier von Bedeutung ist. Sie können nicht vor --directory="/home/username/drupal/sites/default files"dem Ziel haben ~/backup.tgz.
— Chris Stryczynski

6
@ChrisStryczynski Beachten Sie, dass der von der --directoryOption angegebene Pfad nicht lautet "/home/username/drupal/sites/default files". Es /home/username/drupal/sites/defaultfolgt ein Positionsargument, das den Namen des zu tarierenden Verzeichnisses angibt files.
— Kap

48

Hallo, ich habe eine bessere Lösung, wenn ich in das angegebene Verzeichnis eingebe, ist dies unmöglich (Makefiles usw.)

tar -cjvf files.tar.bz2 -C directory/contents/to/be/compressed .

Vergessen Sie nicht den Punkt (.) Am Ende !!


4
Was macht der Punkt am Ende?
— Bruce Sun

3
@BruceSun Das -C ändert Ihr Arbeitsverzeichnis. Der Punkt teilt tar mit, welches Verzeichnis Sie archivieren möchten (dh das aktuelle Arbeitsverzeichnis).
— user12345

2
Wenn Sie den Punkt am Ende weglassen, erhalten Sie wahrscheinlich die Warnung: tar: Feige Weigerung, ein leeres Archiv zu erstellen
— user12345

3
Alle reden über die Option -C oder das Verzeichnis --C, aber ohne das kleine '.' Am Ende, wie @MaikolD es erwähnte, funktioniert es nicht - zumindest in meiner Umgebung.
— Aks

5
Damit haben Sie immer noch einen .Ordner im Stammverzeichnis des Teer
— Elektrovir

2

Verwenden Sie den folgenden Befehl, um alle txt (* .txt) -Dateien von /home/myuser/workspace/zip_from/ bis /home/myuser/workspace/zip_to/ohne Verzeichnisstruktur der Quelldateien mit einem Gunzip zu versehen :

tar -P -cvzf /home/myuser/workspace/zip_to/mydoc.tar.gz  --directory="/home/myuser/workspace/zip_from/" *.txt

0

Das hat bei mir funktioniert:

gzip -dc "<your_file>.tgz" | tar x -C <location>

0

Für mich hat -C oder --directory nicht funktioniert, ich benutze dies

cd source/directory/or/file
tar -cvzf destination/packaged-app.tgz *.jar
# this will put your current directory to what it previously was
cd -

0

Erstellen Sie ein Teerarchiv

tar czf  $sourcedir/$backup_dir.tar --directory=$sourcedir WEB-INF en

Un-tar-Dateien auf einem lokalen Computer

tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/

Auf einen Server hochladen

scp -r -i $privatekey $sourcedir/$backup_dir.tar $server:$deploydir/med365/
echo "File uploaded.. deployment folders"

Un-Tar auf dem Server

ssh -i $privatekey $server tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/

-2
tar -Cczf ~/backup.tgz /home/username/drupal/sites/default/files

-C macht die CD für dich


Dies wird nicht funktionieren. Sehen Sie sich die Lösungen von MaikoID und Neil Butterworth an.
— Vincent

3
-Cfunktioniert, muss aber verwendet werden wie-C <dir> file1 file2 ...
— vyom
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.