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 ?

Brock Boland
quelle

Antworten:

35
cd /home/username/drupal/sites/default/files
tar czf ~/backup.tgz *
John Gibb
quelle
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 
Tom Aranda
quelle
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 !!

MaikoID
quelle
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
Sangram
quelle
0

Das hat bei mir funktioniert:

gzip -dc "<your_file>.tgz" | tar x -C <location>
Vishrant
quelle
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 -
Aashutosh Taikar
quelle
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/
Deepesh Rajpal
quelle
-2
tar -Cczf ~/backup.tgz /home/username/drupal/sites/default/files

-C macht die CD für dich

raf
quelle
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