Я пытаюсь взять текстовый файл с именем MyFile
и сжать его в файл с именем MyFileComp
в том же каталоге.
Я пробовал:
gzip MyFile | touch MyFileComp
gzip MyFile >> MyFileComp
Обе команды создают MyFileComp
, но когда я открываю файл, он пуст. Когда я пытаюсь распаковать файл, он говорит неизвестный суффикс. Я не знаю, что это значит.
Любая помощь очень ценится. Спасибо
Мне кажется, вы неправильно сжимаете. Используйте -c, чтобы отправить его на стандартный вывод и добавьте «.gz» в конце. Это проблема?
gzip -c MyFile > MyFileComp.gz
gzip -d MyFileComp.gz
По умолчанию gzip -c
будет сжато до STDOUT
, так что вы можете перенаправить его на любое имя файла, которое вы хотите. Инверсия, которую вы ищете, это zcat
, потому что gzip -d
или gunzip
, даже при попытке принудительно использовать-f
(начиная с 1.6 ), отказывается распаковывать файл без.gz
gzip -c MyFile > MyFileComp
zcat MyFileComp > MyFile
Предупреждение:Будет перезаписано MyFile
, если оно уже существует.
По умолчанию инструмент gzip
создает файл с суффиксом имени файла .gz
при сжатии файла, имя которого указано в командной строке. Аналогично, при распаковке файла с gzip -d
, учитывая имя сжатого файла в командной строке, он ожидает найти суффикс .gz
в конце имени файла и удалит этот суффикс, чтобы создать имя файла несжатые данные.
Если вы не хотите придерживаться этого поведения, то есть вы хотите, чтобы ваши сжатые файлы вообще не имели суффикса имени файла, и вы хотите распаковать их с помощью gzip -d
, тогда вы не можете давать имена файлам на командную строку на gzip
. Вместо этого пусть gzip
читает со стандартного ввода и записывает на стандартный вывод.
Для сжатия:
gzip <my_file >my_compressed_file
Для распаковки:
gzip -d <my_compressed_file >my_file
Технически вы должны использовать -c
с обеими приведенными выше командами, но поскольку gzip
не дается имя файла в командной строке, он все равно будет читать из стандартного ввода и записывать в стандартный вывод, и эти потоки предоставляется через перенаправления.
Также обратите внимание, что с обеими приведенными выше командами исходные данные (, будь то источник для команды сжатия или для команды распаковки ), останутся на месте, тогда как если вы используете инструмент gzip
как один обычно используют его, указав имя файла в командной строке, исходный файл обычно удаляется, если только не используется опция -k
(--keep
).
Ваша команда
gzip MyFile | touch MyFileComp
запускает две команды gzip MyFile
и touch MyFileComp
независимо друг от друга. gzip
не записывает данные в канал, и даже если бы они были, touch
не читал бы их. В итоге вы получите сжатый файл с именем MyFile.gz
и пустой файл с именем MyFileComp
(, предполагая, что этот файл еще не существует ). Файл MyFile
удален.
Ваша команда
gzip MyFile >> MyFileComp
сжимает MyFile
в MyFile.gz
, как и раньше, и поскольку gzip
ничего не записывает в стандартный вывод,он создаст пустой файл MyFileComp
(, предполагая, что этот файл еще не существует ). Файл MyFile
удален.