Ist es möglich, mehrere Dateien in ein bestimmtes Verzeichnis zu packen, ohne die ursprünglichen gz-Dateien zu löschen?

10660
Bio_X2Y

Ich weiß, dass dies für einzelne Dateien möglich ist, z

gunzip -c my.gz> somedir / my

Kann es für mehrere Dateien gemacht werden?

[UPDATE] Ich habe ein Verzeichnis mit einer großen Anzahl von .gz-Dateien (nicht .tar.gz), und ich möchte sie in ein anderes Verzeichnis packen, während die Originaldateien erhalten bleiben.

5

6 Antworten auf die Frage

9
Nifle

versuche etwas wie

for a in *.gz; do gunzip -c $a > somedir/`echo $a | sed s/.gz//`; done 
Mein Post gelöscht .. Ihr Einzeiler ist einfacher :) Andrejs Cainikovs vor 13 Jahren 0
basename könnte etwas einfacher sein: für ein in * .gz; do zcat $ a> somedir / `basename $ a`; erledigt Neil vor 13 Jahren 0
Danke Neil, aber basename $ a funktioniert für mich in bash auf dem Mac nicht, wie es oben erscheint - vielleicht fehlt etwas Interpunktion? Bio_X2Y vor 13 Jahren 0
Danke Andrejs, Nifle, Neil. Dieser Befehl macht den Trick. Bio_X2Y vor 13 Jahren 0
basename $ a musste die gz-Datei entfernen. deshalb: basame $ a .gz Andy Lee Robinson vor 12 Jahren 0
Die Basename-Option funktioniert nicht Andy vor 11 Jahren 0
2
Rich Homolka

Das wird in Bash funktionieren

for FILE in *.gz do echo -n "File $FILE... " gzip -c $FILE > $ echo "Done" done 

Auf Andrejas Antwort aufbauen, Korrektur für Dateinamen hinzufügen.

Vergessen, Semikolons hinzuzufügen;) Andrejs Cainikovs vor 13 Jahren 0
Sorry, wo genau gehen sie hin? :) Bio_X2Y vor 13 Jahren 0
Uhmm .. nach jedem Befehl innerhalb einer Schleife? :) Echo; gzip; Echo; erledigt... Andrejs Cainikovs vor 13 Jahren 0
Ah ja, ich habe das vor dem ersten "do" verpasst! Dies funktioniert für mich, wenn ich ein Update auf gunzip mache und das Zielverzeichnis einsetze. Es wurde mehr Arbeit benötigt, um die ".gz" -Datei aus den nicht komprimierten Zieldateien zu entfernen. Vielen Dank. Bio_X2Y vor 13 Jahren 0
Dadurch werden meine Textdateien aus .gz-Dateien entstellt. Andy vor 11 Jahren 0
2
Andy

Das funktioniert auch. Nur eine andere Möglichkeit, es zu tun. Ihre extrahierten Textdateien werden dadurch nicht beschädigt. Ich habe das tatsächlich getestet.

for f in *.gz; do STEM=$(basename "$" .gz) gunzip -c "$" > /somedir/"$"; done 
2
sphakka

Angenommen, jede Datei hat einen Namen wie

foo.bar.gz 

basename (GNU coreutils 8.4) kann Ihnen den ursprünglichen Namen der unkomprimierten Datei geben

for f in /source/dir/*.gz; do t=$(basename $f .gz); gunzip -c $f > /target/dir/$t; done 
0
Sanjay Sheth

Klingt nach einem Job für eine schnelle Perl / Python / Ruby / etc. Skript.

Passen Sie einfach den Code in diesem Beispiel an, um den erforderlichen Gunzip-Befehl anzuwenden.

0
Andy Lee Robinson

Diese Version behält die ursprünglichen Filmzeiten wie Inplace gzip bei und ist "platzsparend":

IFS=$'\n';for a in *.gz; do d=`basename $a .gz`;echo gunzip -c $a > somedir/$d; touch somedir/$d -r $a; done; 

Ich fand die Anführungszeichen "$ a" und "$ d" also unnötig, da bash automatisch Leerzeichen zu verlassen schien.