Как сообщить gzip о сохранении исходного файла?

Я хотел бы сжать текстовый файл, используя инструмент командной строки gzip, сохраняя исходный файл. По умолчанию выполняется следующая команда

gzip file.txt 

приводит к изменению этого файла и переименованию файла file.txt.gz вместо этого поведения я хотел бы иметь этот новый сжатый файл в дополнение к существующему file.txt . Пока я использую следующую команду, чтобы сделать это

 gzip -c file.txt > file.txt.gz 

Это работает, но мне интересно, почему нет простого решения для выполнения такой общей задачи? Может, я пропустил этот вариант?

  • gunzip папку со многими файлами
  • Со временем степень сжатия gz улучшается?
  • Как распечатать перед строк ключевого слова поиска с помощью grep в gz-файле?
  • Gzip, но исключая некоторые файлы каталогов и также добавляя текущую дату
  • Комбинация ls, xargs и zcat приводит к дублированию суффиксов имени файла?
  • Сжатие папки, но не сжимать определенные типы файлов, а включать их в файл gz
  • Создайте архив с командой "gzip"
  • zcat файл по строкам?
  • 3 Solutions collect form web for “Как сообщить gzip о сохранении исходного файла?”

    Для GNU gzip 1.6 или выше, FreeBSD и производные или последние версии NetBSD, см . Ответ don_cristi .

    С любой версией вы можете использовать перенаправления оболочки, как в:

     gzip < file > file.gz 

    Когда не задан какой-либо аргумент, gzip считывает свой стандартный ввод, сжимает его и записывает сжатую версию в свой стандартный вывод. В качестве бонуса при использовании перенаправления оболочки вам не нужно беспокоиться о файлах, называемых "--help" или "-" (этот последний все еще является проблемой для gzip -c -- ).

    Другое преимущество над gzip -c file > file.gz состоит в том, что если file не может быть открыт, команда завершится с ошибкой, не создавая пустой file.gz (или обрезая уже существующий file.gz ) и без запуска gzip .

    Значительная разница по сравнению с gzip -k заключается в том, что не будет попытки скопировать метаданные file (право собственности, разрешения, время модификации, имя несжатого файла) в file.gz

    Кроме того, если file.gz уже существует, он будет молча переопределять его, если вы не включили опцию noclobber в своей оболочке (например, с set -o noclobber в оболочках POSIX).

    Обратите внимание, что в недавно выпущенном (июнь 2013 г.) выпуске gzip-1.6 «принимается опция -keep (-k) для согласованности с такими инструментами, как xz, lzip и bzip2. С помощью этой опции gzip больше не удаляет именованные входные файлы при сжатии или распаковке " .

    Выдержка из страницы руководства:

      -k --keep Keep (don't delete) input files during compression or decompression. 

    Итак, с 1.6 , вы можете использовать -k или --keep чтобы сохранить исходный файл:

     gzip -k -- "$file" 

    (обратите внимание, что он не работает, если $file is - (который gzip интерпретирует как значение stdin вместо фактического имени файла - ), и в этом случае вы должны изменить его на ./- )

    Этот вариант был впервые представлен в реализации FreeBSD gzip (в FreeBSD 7.0 в 2007 году) для обеспечения совместимости с bzip2 . Этот gzip основан на перезаписи GNU gzip NetBSD. Опция -k конце концов вернула NetBSD в 2010 году .

    Из документации кажется, что нет возможности создать копию файла.

    Вы можете определить функцию оболочки

     gzipkeep() { if [ -f "$1" ] ; then gzip -c -- "$1" > "$1.gz" fi } 

    а потом

     gzipkeep file.txt 
    Interesting Posts

    Ошибка в R: невозможно открыть соединение с X11

    Установка Dell R710

    Есть ли способ проверить пользовательский SSH-ключ, чтобы увидеть, является ли кодовая фраза пустой

    Вывод `java -version` не соответствует grep или awk

    Запуск тысяч параллельных фоновых процессов в сценарии bash

    сценарий оболочки для чтения из нескольких файлов параллельно

    Как бороться с окончанием опций – в getopts

    Grub, похоже, не загружает свою конфигурацию из grub.cfg

    SSH jumphost без учетных записей пользователей на jumphost

    Что такое «правильный путь» для внесения изменений в /etc/resolv.conf с помощью /etc/resolv.conf.d?

    CentOS 7 | python3: ошибка при загрузке разделяемых библиотек: libpython3.5m.so.1.0

    Как использовать встроенный bash для замены вывода подоболочки или функции

    Получено меньше вывода с параметром print0 для поиска?

    команда find также включает в себя текущий каталог в результате, который не требуется перемещать

    Есть ли конкретная причина, почему Docker не является сервисом на dbus?

    Linux и Unix - лучшая ОС в мире.