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.