предисловие
Среди распространенных команд Linux многие используются для сжатия или распаковки файлов.Эта статья познакомит вас с необычным, но очень практичным использованием этих команд распаковки.
tar
tar — наиболее часто используемая команда распаковки в Linux. Команду tar можно использовать для обработки файлов с суффиксами tar, tar.gz, tgz, .tar.Z, tar.bz2. Описание задействованных параметров:
-c 建立新的压缩文件
-r 添加文件到已经压缩的文件
-u 添加改变了和现有的文件到已经存在的压缩文件
-x 从压缩的文件中提取文件
-t 显示压缩文件的内容
-z 支持gzip解压文件
-j 支持bzip2解压文件
-v 显示操作过程
-k 保留源有文件不覆盖
-C 切换到指定目录
-f 指定压缩文件
--delete 删除包中文件
--strip-components 去除目录
--add-file 向包中添加文件
компрессия
Заархивируйте tarball без сжатия
tar -cvf test.tar test1.log test2.log #归档多个文件
tar -cvf test.tar test/*  #归档test目录下所有文件
tar -cvf test.tar *.log  #归档所有以.log结尾的文件
Так как этот метод не сжимает, только архивы, поэтомуочень быстро, при этом занимая больше места.
Заархивируйте и сожмите в tar.gz или tar.bz2
Упаковка таким образом сжимает файл:
tar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩
Посмотреть файлы в архиве
Если вы не хотите распаковывать и просто хотите просмотреть содержимое файлов в сжатом пакете, вы можете использовать параметр -t:
tar -tvf test.tar #可查看test包中有哪些文件
Удалить исходные файлы после упаковки
Иногда бывает необходимо удалить исходные файлы после упаковки, но удалять по одному проблематично, мы можем использовать опцию --remove-files:
tar -zcvf test.tar.gz test.log --remove-files
Упаковать файлы, отличные от указанного каталога или файла
Для файлов в некоторых каталогах может потребоваться упаковка только некоторых файлов, поэтому вы можете использовать параметр --exclude, чтобы исключить некоторые файлы, которые не нужно упаковывать:
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件
Здесь используется параметр --exclude, который поддерживает подстановочные знаки и регулярные выражения, поэтому он также очень мощный.
Обновить файлы в архив
Например, тестовый и другие файлы были введены в сжатый пакет, и теперь вы хотите обновить только тестовый файл в сжатом пакете, тогда вы можете использовать параметр --add-file:
tar -tf test.tar --add-file=test #只针对tar包
Добавить файлы в архив
Чтобы добавить файлы в архив, используйте параметр -r:
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar包
удалить файлы в архиве
Файлы в пакете можно удалить с помощью параметра --delete без распаковки:
tar --delete -f test.tar test1 #从test.tar中删除test1文件
распаковать
Извлеките файлы tar.gz и tar в текущий каталог.
tar -xvf test.tar.gz
tar -xvf test.tar
Разархивировать в указанный каталог
tar -xvf test.tar.gz -C dir
tar -xvf test.tar -C dir
Разархивируйте указанный файл в пакете
Например, файлы в пакете test.tar.gz выглядят следующим образом:
1.txt
log/
log/1.log
log/2.log
log/2.log
log/4.log
log/5.log
Если нам нужно извлечь только 1.log в каталог журнала, нам нужно выполнить только следующую команду:
tar -xvf test.tar.gz log/1.log
tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
Удалить структуру каталогов при распаковке
Файлы в сжатом пакете могут иметь многоуровневые каталоги.После распаковки файлов обычным способом соответствующие каталоги также будут существовать.Если вам нужны только файлы в сжатом пакете, вы можете удалить структуру каталогов (примечание: имена файлов в одной и той же папке не могут повторяться):
tar -xvf test.tar.gz --strip-components=1 #去掉一层目录
Не перезаписывать исходный файл при распаковке
Файлы в пакете могут уже существовать в текущем каталоге.Если вы не хотите, чтобы разархивированные файлы перезаписывали существующие в данный момент файлы, вы можете использовать параметр -k (будет выдано сообщение об ошибке):
tar -xvkf test.tar.gz
специальное напоминание
Параметр f диапазона декомпрессии или сжатия, упомянутый выше, необходимо поместить в конец, потому что он определяет имя сжатого пакета, иначе декомпрессия или сжатие не удастся.
zip/unzip
Команды zip и unzip в основном используются для обработки zip-пакетов.
компрессия
Описание задействованных параметров:
-d 从压缩文件内删除指定的文件。
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
-j 只保存文件名称及其内容,而不存放任何目录名称。
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
-u 更换较新的文件到压缩文件内。
-v 显示指令执行过程或显示版本信息。
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
- <压缩效率> 压缩效率是一个介于1-9的数值。
Сжатый файл
zip -r test.zip test/ #打包test目录下的文件
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
Укажите степень сжатия для упаковки файла
zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
упаковать файлы символических ссылок
Предыдущая команда может упаковывать только обычные файлы.Если вы хотите упаковать файлы с символическими ссылками, вам нужно использовать параметр -y:
zip -ry test.zip test
Добавляйте или обновляйте файлы в архив
Иногда вам нужно добавить файлы в сжатый пакет, но вы не хотите повторно распаковывать пакет, вы можете использовать параметр -u:
zip -u test.zip test2 #向test.zip 包中增加test2文件
Публичный аккаунт WeChat [Programming Pearl]: сосредоточьтесь, помимо прочего, на том, чтобы поделиться основами компьютерного программирования, Linux, языком C, C++, структурами данных и алгоритмами, инструментами, ресурсами и другими [оригинальными] техническими статьями, связанными с программированием. Оригинальный адрес:Ууху, Ян Бинху.com/2018/10/19/…
Шифровать при сжатии
Если вам нужно зашифровать сжатый пакет во время сжатия, вы можете использовать параметр -P:
zip -r test.zip test1 test -P 66666 #使用密码66666加密
Удалить определенные файлы сжатого пакета
zip -d test.zip test #删除test.zip包中的test文件
распаковать
Описание задействованных параметров:
-l 显示压缩文件内所包含的文件
-j 只保存文件名称及其内容,而不存放任何目录名称。
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
-v 显示指令执行过程或显示版本信息。
-d 指定解压目录,目录不存在会创建
Просмотр информации о файле в сжатом пакете
unzip -l test.zip #可以看到压缩包中的文件名,日期等信息
unzip -v test.zip #查看更多信息,例如crc校验信息等
Разархивируйте сжатый пакет
unzip -o test.zip -d dir #讲test.zip解压到dir目录
Разархивируйте указанный файл в пакете
Если вы не знаете имя файла, который необходимо распаковать, вы можете сначала просмотреть файлы в пакете, а затем использовать следующий метод:
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录
unzip -o tet.zip "*.log" -d dir #解压包中所有的log文件
Удалить структуру каталогов при распаковке
В сжатом пакете есть несколько структур каталогов. Обычная распаковка по-прежнему сохраняет структуру каталогов. Если вам нужны только файлы в сжатом пакете, вы можете использовать параметр -j:
zip -oj test.zip -d ./temp
Разархивируйте пакет jar
Пакет jar представляет собой пакет архива Java, но вы также можете разархивировать его, чтобы просмотреть файлы внутри:
unzip -o java.jar -d dir
gzip
Описание задействованных параметров:
-k 保留源文件
-d 解开压缩文件
-r 递归处理,将指定目录下的所有文件及子目录一并处理
-v 显示指令执行过程
Команда tar имеет параметр -z, и когда она упакована в файл tar.gz, для сжатия вызывается gzip. Степень сжатия gzip для текста составляет около 60% ~ 70%, а сжатый файл пакета часто имеет суффикс gz. Используйте параметр -k, чтобы сохранить исходные файлы:
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包
gzip -rkv ./* 递归压缩
Распаковать тоже несложно:
gzip -dv test.gz
bzip2
Когда команда tar использует параметр -j для упаковки файла как tar.bz2, для сжатия вызывается bzip2. После сжатия или распаковки bzip2 исходные файлы удаляются. Если вам нужно сохранить исходные файлы, вы можете использовать параметр -k:
bzip2 -zk test #压缩test文件
bzip2 -dk test.bz2 #解压
rar/unrar
Команды rar и unrar не включены в дистрибутив Linux и должны быть установлены отдельно. Обычное использование выглядит следующим образом:
rar a test.tar test #将test文件压缩为test.tar
rar e test.rar #解压test.tar
unrar x test.rar #解压test.tar
Сравнение степени сжатия
Общая степень сжатия:
tar.bz2>tar.gz>zip>tar
Чем выше степень сжатия, тем больше времени требуется для сжатия и распаковки.
Суммировать
Сжатие файлов может сэкономить дисковое пространство и пропускную способность во время передачи по сети, но следует отметить, что пространство и время необходимо взвешивать в соответствии с реальными приложениями. Команд распаковки много, во избежание неудобств на других платформах можно выбрать общие команды для сжатия файлов. Если у вас есть какие-либо дополнения или предложения, пожалуйста, оставьте сообщение.
Вышеупомянутый контент взят из общедоступной учетной записи [Programming Pearl].