Gibt es einen einfachen Shell-Befehl / ein einfaches Shell-Skript, das das Ausschließen bestimmter Dateien / Ordner von der Archivierung unterstützt?
Ich habe ein Verzeichnis, das mit einem Unterverzeichnis archiviert werden muss, das eine Reihe sehr großer Dateien enthält, die ich nicht sichern muss.
Nicht ganz Lösungen:
Der tar --exclude=PATTERN
Befehl entspricht dem angegebenen Muster und schließt diese Dateien aus. Ich muss jedoch bestimmte Dateien und Ordner ignorieren (vollständiger Dateipfad), da sonst gültige Dateien möglicherweise ausgeschlossen werden.
Ich könnte auch den Befehl find verwenden, um eine Liste von Dateien zu erstellen und diejenigen auszuschließen, die ich nicht archivieren und an tar übergeben möchte, aber das funktioniert nur für eine kleine Anzahl von Dateien. Ich habe Zehntausende.
Ich fange an zu denken, dass die einzige Lösung darin besteht, eine Datei mit einer Liste von auszuschließenden Dateien / Ordnern zu erstellen, dann mit rsync mit --exclude-from=file
alle Dateien in ein tmp-Verzeichnis zu kopieren und dieses Verzeichnis dann mit tar zu archivieren.
Kann sich jemand eine bessere / effizientere Lösung vorstellen?
EDIT: Charles Ma 's Lösung funktioniert gut. Das große Problem ist, dass das --exclude='./folder'
MUSS am Anfang des Tar-Befehls stehen muss. Vollständiger Befehl (CD zuerst, Sicherung ist also relativ zu diesem Verzeichnis):
cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .
--exclude
muss nicht der erste sein, sondern muss irgendwo vor dem Quellverzeichnis stehen (getestet mit tar 1.29 auf Cygwin).