Wie kann ich Dateien mit regulären Ausdrücken aus dem TAR-Archiv ausschließen?

10

Ich habe eine einfache Frage, kann die Antwort jedoch nicht finden oder lösen. Ich möchte ein Teerarchiv erstellen, aber ich möchte einige Dateien mit regulären Ausdrücken davon ausschließen.

Ein Beispiel für die auszuschließende Datei ist: 68x640X480.jpg

Ich habe das ohne Glück versucht:

tar cvf test.tar --exclude=[0-9]+x[0-9X]+\.jpg /data/foto

Kann jemand helfen?

Frodik
quelle

Antworten:

11

Sie können einige zusätzliche Tools wie findund verwenden egrep:

find directory/ -type f -print | egrep -v '[0-9]+x[0-9X]+\.jpg' | tar cvfz directory.tar.gz -T -

Der Nachteil der oben genannten Methode ist, dass sie nicht für alle möglichen Dateinamen funktioniert. Eine weitere Möglichkeit ist die eingebaute in der Verwendung auszuschließen Funktionalität tar:

tar -czvf directory.tar.gz --exclude='*x*X*.jpg' directory

Leider funktioniert die zweite Methode nicht mit regulären Ausdrücken, sondern nur mit Platzhaltern.

Vladimir Blaskov
quelle
Danke, das habe ich gesucht. Können Sie sich bitte notieren, welche Dateinamen nicht funktionieren würden? zB mit welchen Zeichen?
Frodik
Sie sollten sich darüber keine Sorgen machen - die meisten Dateinamen funktionieren mit dieser Lösung einwandfrei. Das Problem ist, dass UNIX / Linux-Dateinamen so ziemlich alles enthalten können, sogar Steuerzeichen - solche undurchsichtigen Kombinationen funktionieren mit der ersten Lösung nicht.
Vladimir Blaskov
Eine schöne Lektüre im Zusammenhang mit UNIX / Linux / POSIX-Dateinamen: dwheeler.com/essays/fixing-unix-linux-filenames.html
Vladimir Blaskov
0

Vielleicht solltest du es mit cpio versuchen

http://cybertiggyr.com/cpio-howto

Es liest aus der Dateiliste und führt die Archivierung durch. Sie können eine Dateiliste mit sed wie unten angegeben erstellen .

ls |sed   '/[0-9]*x[0-9]*X.*/d' >/tmp/files

Sie können es dann als Eingabe für cpio verwenden.

Nitine
quelle