11

Мне нужно сжать все файлы в директории отдельно, включая все файлы в подкаталогах без последующего удаления оригиналов. Итак, допустим, у меня есть index.html, в конце я хочу иметь index.html.gzip AND index.html.

Я могу распаковать все файлы в моем каталоге через

gzip -r .

Но я хочу сохранить оригинальные файлы также.

Это возможно?

5 ответов5

9
find . -type f | \
while read -r x
do
  gzip -c "$x" > "$x.gz"
done

-c отправляет результат в стандартный вывод и сохраняет оригинал в покое. Недостатком является то, что вам нужно найти файлы самостоятельно. Для более сложных траверса, вы можете использовать find(1) однако, как и . поиск начинается с текущего каталога, а -type f возвращает имя каждого обычного файла.

5
find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;

Вы можете легко переключать его, чтобы включить то, что вы хотите сжать ( -name '*.txt -or -name '*.html и т.д.), А не как сейчас, за исключением некоторых файлов (уже сжатых, резервных и временных файлов).

Обрабатывает пробелы в имени файла тоже очень хорошо.

Замените gzip на echo gzip для тестирования. Или пропустите часть -exec все вместе.

Изменить: О, я забыл упомянуть, что это не проверяет, если <target>.gz уже существует. Это может или не может быть проблемой.

Edit2: Хорошо, здесь мы идем с чем-то, что проверяет существующий файл. Если это может быть желательно. Прошу прощения за единственность.

while read file; do if [ ! -f "$file.gz" ]; then echo "Compressing $file"; gzip -c "$file" > "$file.gz"; else echo "Not overwriting $file.gz";  fi  done < <(find . -type f -not \( -name '*.gz' -or -name '*[~#]' \))

Возможно, моя find -foo совсем не та, что может быть, вполне возможно пропустить поиск напрямую.

2

Просто добавьте опцию -c, я думаю, это должно работать

1

В gzip 1.6 (июнь 2013 г.) добавлена опция -k, --keep , так что теперь вы можете:

gzip -kr .

Найдено по адресу: https://unix.stackexchange.com/questions/46786/how-to-tell-gzip-to-keep-original-file

0
gzip -rc `ls` > archive.gz

Протестировано на Debian (gzip 1.3.12-6)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .