Wie kann ich rekursiv alle Dateien bzip2, die unter .bz2
Linux nicht mit der Erweiterung enden ?
linux
ssh
recursive
compression
Alon Gubkin
quelle
quelle
+
oderxargs
statt\;
. Es ist nicht notwendig, den geschweiften Klammern zu entkommen. POSIX unterstützt!
"nicht".find /var/log/blah -not -name \*.bz2 -print0 | xargs -0 bzip2
Auf den ersten Blick (Entschuldigung, ich habe keine Shell zum Testen von Zitaten usw. zur Hand):
Dies verwendet find, um alle Dateien zu finden, grep, um diejenigen mit der Erweiterung .bz2 zu entfernen und sie dann einzeln in bzip2 einzuspeisen. Ich gehe jedoch davon aus, dass ein Teil des Zitats falsch ist - ich würde das Bit in den Backquotes zuerst separat testen.
Viel Glück! Vielleicht möchten Sie stattdessen xz verwenden - es wird normalerweise besser komprimiert - oder sogar alles tarieren und stattdessen bzip2 oder xz.
quelle
!
"nicht". Die Verwendung einerfor
Schleife schlägt für Dateien fehl, deren Namen Leerzeichen enthalten. Sie sollten verwendenfind | while read
.Mit zsh (
setopt extended_glob
muss eingeschaltet sein):**
Rekursionen in Unterverzeichnissen;^*.bz2
passt zu allem außer*.bz2
;(.)
beschränkt sich auf reguläre Dateien.Wenn Sie mit Bash 4 die
bzip2
Beschwerden über das Aufrufen von Verzeichnissen ignorieren können :quelle
Hier ist ein Einzeiler. Falls erforderlich,
ifne
zuerst installieren . Unter Ubuntu:Und dann:
Dies funktioniert genauso wie bei anderen Antworten, es werden jedoch keine Warnmeldungen zu bzip2ing-Verzeichnissen angezeigt. Wenn nichts
bzip2
mehr zu tun ist, werden keine Warnmeldungen zu bzip2-komprimierten Daten an ein Terminal gesendet. Es verwendet auchxargs
etc.YOUR_DIR kann Platzhalter oder mehrere Verzeichnisse haben, z. B. YOUR * DIR oder ähnliches.
quelle
In der
fish
Konsole ist es ziemlich einfach und Sie müssen sich keine Gedanken über Rohre und seltsame Backslashes machen:quelle