versuche etwas wie
for a in *.gz; do gunzip -c $a > somedir/`echo $a | sed s/.gz//`; done
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.
versuche etwas wie
for a in *.gz; do gunzip -c $a > somedir/`echo $a | sed s/.gz//`; done
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.
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
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
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.
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.