Сжатие файла в другой файл с помощью командной строки Gnu/Linux

Я пытаюсь взять текстовый файл с именем MyFileи сжать его в файл с именем MyFileCompв том же каталоге.

Я пробовал:

gzip MyFile | touch MyFileComp
gzip MyFile >> MyFileComp

Обе команды создают MyFileComp, но когда я открываю файл, он пуст. Когда я пытаюсь распаковать файл, он говорит неизвестный суффикс. Я не знаю, что это значит.

Любая помощь очень ценится. Спасибо

0
19.05.2020, 00:50
3 ответа

Мне кажется, вы неправильно сжимаете. Используйте -c, чтобы отправить его на стандартный вывод и добавьте «.gz» в конце. Это проблема?

gzip -c MyFile > MyFileComp.gz
gzip -d MyFileComp.gz
2
28.04.2021, 23:13

По умолчанию gzip -cбудет сжато до STDOUT, так что вы можете перенаправить его на любое имя файла, которое вы хотите. Инверсия, которую вы ищете, это zcat, потому что gzip -dили gunzip, даже при попытке принудительно использовать-f(начиная с 1.6 ), отказывается распаковывать файл без.gz

gzip -c MyFile > MyFileComp
zcat MyFileComp > MyFile

Предупреждение:Будет перезаписано MyFile, если оно уже существует.

0
28.04.2021, 23:13

По умолчанию инструмент 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удален.

1
28.04.2021, 23:13

Теги

Похожие вопросы