Ich muss alle Dateien in einem Verzeichnis separat gzipen, einschließlich aller Dateien in Unterverzeichnissen, ohne die Originale danach zu löschen. Nehmen wir also an, ich habe index.html, ich möchte am Ende index.html.gzip UND index.html haben.
Ich kann alle Dateien in meinem Verzeichnis über gzip
gzip -r .
Aber ich möchte auch die Originaldateien behalten.
Ist das möglich?
*.*
inls
?*.*
allen regelmäßig benannten Dateien und normalerweise keinen Verzeichnissen. Natürlich funktioniert es nur in den meisten Fällen und normalerweise nicht, wenn Sie es brauchen. Verwenden Sie dann denfind
Befehl.ls *.*
wählt keine Dateien wie TODO aus .ls
ist nicht erforderlich überhaupt :for x in *
. Die Verwendungfind
sollte jedoch seinfind . -type f | while read -r x
.-r
Einschaltenread
.Sie können es einfach umschalten, um einzuschließen, was Sie komprimieren möchten (
-name '*.txt -or -name '*.html
usw.), anstatt wie jetzt, mit Ausnahme einiger Dateien (bereits komprimierte, Backup- und temporäre Dateien).Behandelt auch Leerzeichen im Dateinamen.
Wechsel
gzip
aufecho gzip
zum Testen. Oder überspringen Sie den -exec-Teil alle zusammen.Edit: Oh, ich habe vergessen zu erwähnen, dass dies nicht prüft, ob es
<target>.gz
bereits existiert. Dies kann ein Problem sein oder auch nicht.Edit2: Ok, hier geht es mit etwas, das nach vorhandenen Dateien sucht . Wenn das gewünscht sein mag. Verzeihen Sie die Oneliney-Ness.
Mein
find
-foo ist vielleicht nicht das, was es sein könnte, es kann sehr gut möglich sein, direkt in find zu überspringen.quelle
Fügen Sie einfach die Option -c hinzu. Ich denke, das sollte funktionieren
quelle
gzip 1.6 (Juni 2013) hat die
-k, --keep
Option hinzugefügt , sodass Sie jetzt:Gefunden unter: /unix/46786/how-to-tell-gzip-to-keep-original-file
quelle
Getestet auf Debian (gzip 1.3.12-6)
quelle
ls
ist unnötig, verwenden*
.