попробуй что-то вроде
for a in *.gz; do gunzip -c $a > somedir/`echo $a | sed s/.gz//`; done
Я знаю, что это можно сделать для отдельных файлов, например,
gunzip -c my.gz> somedir / my
Это можно сделать для нескольких файлов?
[ОБНОВЛЕНИЕ] У меня есть каталог с большим количеством файлов .gz (не .tar.gz), и я хочу заархивировать их в другой каталог, оставив исходные файлы без изменений.
попробуй что-то вроде
for a in *.gz; do gunzip -c $a > somedir/`echo $a | sed s/.gz//`; done
Это будет работать в Bash
for FILE in *.gz do echo -n "File $FILE... " gzip -c $FILE > $ echo "Done" done
Опираясь на ответ Андрея, добавив исправление для имен файлов.
Это тоже работает. Просто еще один способ сделать это. Это не испортит ваши извлеченные текстовые файлы. Я действительно проверил это.
for f in *.gz; do STEM=$(basename "$" .gz) gunzip -c "$" > /somedir/"$"; done
Assuming that each file has a name like
foo.bar.gz
basename
(GNU coreutils 8.4) can give you the original uncompressed file's name, thus I'd do
for f in /source/dir/*.gz; do t=$(basename $f .gz); gunzip -c $f > /target/dir/$t; done
Звучит как работа для быстрого perl / python / ruby / etc. скрипт.
Просто настройте код в этом примере, чтобы применить необходимую команду gunzip.
Эта версия сохраняет исходное время файла, как это делает gzip на месте, и «космически безопасна»:
IFS=$'\n';for a in *.gz; do d=`basename $a .gz`;echo gunzip -c $a > somedir/$d; touch somedir/$d -r $a; done;
Я обнаружил, что цитирование «$ a» и «$ d», таким образом, было ненужным, поскольку bash, по-видимому, автоматически выходил из пробелов.