Я хочу просмотреть содержимое (список файлов и папок) архива, например, файл tar.gz
, , не распаковывая его.
Есть ли способы сделать это?
Выполните следующую команду в терминале, чтобы увидеть содержимое файла tar.gz, не извлекая его:
tar -tf filename.tar.gz
-t, --list
. Перечислить содержимое архива. Аргументы являются необязательными. Когда они заданы, они указывают имена членов списка.
-f, --file=ARCHIVE Используйте архивный файл или устройство ARCHIVE...
less
также может открыть gz
-сжатые и несжатые архивы tar
. Это дает вам прекрасный вывод в стиле ls -l
:
$ less ~/src/compiz_0.9.7.8-0ubuntu1.6.debian.tar.gz
drwxrwxr-x 0/0 0 2012-09-21 11:41 debian/
drwxrwxr-x 0/0 0 2012-08-09 13:32 debian/source/
-rw-rw-r-- 0/0 12 2012-08-09 13:32 debian/source/format
-rw-rw-r-- 0/0 25 2012-08-09 13:32 debian/libdecoration0-dev.docs
-rw-rw-r-- 0/0 25 2012-08-09 13:32 debian/compiz-dev.docs
-rw-rw-r-- 0/0 347 2012-08-09 13:32 debian/compiz-core.install
-rw-rw-r-- 0/0 125 2012-08-09 13:32 debian/libdecoration0-dev.install
...
И так как это меньше
, вы можете прокручивать его, искать и т.д.. Однако, при использовании других алгоритмов сжатия (по моему опыту) он не работает.
Вы можете использовать команду z: zcat
, zless
, zgrep
.
Для просмотра содержимого файлов используйте:
zcat file.gz
Чтобы grep something использовать:
zgrep test file.gz
Чтобы проверить разницу между файлами, используйте:
zdiff file1.gz file2.gz
Это всего лишь несколько примеров, их гораздо больше.
tar
флаг -t
будет отображать содержимое для вас. Добавьте это к другим своим флагам (так -tvfz
для tar.gz
, -tvfj
для tar.bz2
и т. Д.) и вы можете просматривать без извлечения. Оттуда вы можете довольно легко извлекать отдельные файлы
tar -xvfz mybackup.tar.gz path/to/file
. Большая проблема с tar
- это запоминание всех других флагов . Поэтому я обычно полагаюсь на 7z
(из пакета p7zip-full
) для выполнения всего моего архивирования. Я не буду утверждать, что он совсем лучше, но он поддерживает почти все (без необходимости указывать тип сжатия), и аргументы логичны.
7z l archive.ext
7z e archive.ext path/to/file
Это, конечно, менее способно, но вам не нужен человек страницу, чтобы использовать его.
Также есть Midnight Commander ( mc
). Это универсальный задира для квазиграфического управления файлами через терминал, и после небольшого тестирования он просто позволяет вам просматривать оба архива .tar.gz
и .7z
. Я не уверен, сколько еще он поддерживает.
Ну, это зависит от файла. Большинство программ (де) сжатия имеют флаг, отображающий содержимое архива.
tar
/ tar.gz
/ tgz
/ tar.xz
/ tar.bz2
/ tbz
файлы
$ tar tf foo.tgz
dir1 /
dir1 / subdir1 /
dir1 / subdir1 / файл
dir1 / subdir2 /
каталог1 / подкаталог2 / файл
dir2 /
zip
файлы
$ zip -sf foo.zip
Архив содержит:
dir1 /
dir2 /
dir1 / subdir1 /
dir1 / subdir1 / файл
dir1 / subdir2 /
каталог1 / подкаталог2 / файл
Всего 6 записей (0 байт)
7zip
файлы
$ 7z l foo.7z
7-Zip [64] 9.20 Copyright (c) 1999-2010 Игорь Павлов 18-11-2010
p7zip версии 9.20 (locale = en_US.utf8, Utf16 = on, HugeFiles = on, 4 процессора)
Архив листинга: foo.7z
-
Путь = foo.7z
Тип = 7z
Сплошной = -
Блоки = 0
Физический размер = 168
Размер заголовков = 168
Дата Время Размер атрибута Сжатое имя
------------------- ----- ------------ ------------ - ----------------------
2015-03-30 19:00:07 .... A 0 0 dir1 / subdir1 / file
2015-03-30 19:00:07 .... A 0 0 dir1 / subdir2 / file
2015-03-30 19:07:32 D .... 0 0 dir2
2015-03-30 19:00:07 D .... 0 0 dir1 / subdir2
2015-03-30 19:00:07 D .... 0 0 dir1 / subdir1
2015-03-30 19:00:06 D .... 0 0 dir1
------------------- ----- ------------ ------------ - ----------------------
0 0 2 файла, 4 папки
rar
файлы
$ rar v foo.rar
RAR 4.20 Copyright (c) 1993-2012 Александр Рошаль 9 июня 2012 г.
Пробная версия Тип RAR -? за помощью
Архив foo.rar
Путь / Комментарий
Размер Соотношение упаковки Дата Время Атрибут CRC Мет Вер
-------------------------------------------------- -----------------------------
dir1 / subdir1 / файл
0 8 0% 30-03-15 19:00 -rw-r - r-- 00000000 м3б 2,9
каталог1 / подкаталог2 / файл
0 8 0% 30-03-15 19:00 -rw-r - r--00000000 м3б 2,9
dir1 / subdir1
0 0 0% 30-03-15 19:00 drwxr-xr-x 00000000 m0 2.0
dir1 / subdir2
0 0 0% 30-03-15 19:00 drwxr-xr-x 00000000 m0 2.0
dir1
0 0 0% 30-03-15 19:00 drwxr-xr-x 00000000 m0 2.0
dir2
0 0 0% 30-03-15 19:07 drwxr-xr-x 00000000 m0 2.0
-------------------------------------------------- -----------------------------
6 0 16 0%
Это наиболее популярные форматы архивов. Имея все это в виду, вы могли бы написать небольшой сценарий, который использует соответствующую команду в зависимости от расширения файла, который вы ему даете:
#!/usr/bin/env bash
for file in "$@"
do
printf "\n-----\nArchive '%s'\n-----\n" "$file"
## Get the file's extension
ext=${file##*.}
## Special case for compressed tar files. They sometimes
## have extensions like tar.bz2 or tar.gz etc.
[[ "$(basename "$file" ."$ext")" =~ \.tar$ ]] && ext="tgz"
case $ext in
7z)
type 7z >/dev/null 2>&1 && 7z l "$file" ||
echo "ERROR: no 7z program installed"
;;
tar|tbz|tgz)
type tar >/dev/null 2>&1 && tar tf "$file"||
echo "ERROR: no tar program installed"
;;
rar)
type rar >/dev/null 2>&1 && rar v "$file"||
echo "ERROR: no rar program installed"
;;
zip)
type zip >/dev/null 2>&1 && zip -sf "$file"||
echo "ERROR: no zip program installed"
;;
*)
echo "Unknown extension: '$ext', skipping..."
;;
esac
done
Сохраните этот сценарий в своем PATH
и сделайте его исполняемым. Затем вы можете перечислить содержимое любого архива:
$ list_archive.sh foo.rar foo.tar.bz foo.tar.gz foo.tbz foo.zip
-----
Archive 'foo.rar'
-----
RAR 4.20 Copyright (c) 1993-2012 Alexander Roshal 9 Jun 2012
Trial version Type RAR -? for help
Archive foo.rar
Pathname/Comment
Size Packed Ratio Date Time Attr CRC Meth Ver
-------------------------------------------------------------------------------
dir1/subdir1/file
0 8 0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
dir1/file
0 8 0% 30-03-15 19:29 -rw-r--r-- 00000000 m3b 2.9
dir1/subdir1
0 0 0% 30-03-15 19:00 drwxr-xr-x 00000000 m0 2.0
dir1
0 0 0% 30-03-15 19:29 drwxr-xr-x 00000000 m0 2.0
dir2
0 0 0% 30-03-15 19:07 drwxr-xr-x 00000000 m0 2.0
-------------------------------------------------------------------------------
5 0 16 0%
-----
Archive 'foo.tar.bz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/
-----
Archive 'foo.tar.gz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/
-----
Archive 'foo.tbz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/
-----
Archive 'foo.zip'
-----
Archive contains:
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/
Total 5 entries (0 bytes)
И поскольку кто-то упомянул, что этот меньший редактор, естественно, emacs также могут это сделать:
Почему бы не использовать vim
для просмотра вашего архива и открытия файлов (по крайней мере, текстовых файлов):
vim archive.tar.gz
Нажмите клавиши со стрелками для прокрутки и Enter , чтобы открыть файл.
sudo chmod 700 $(which gnome-disks) && sudo mv /usr/share/applications/gnome-disks.desktop /usr/share/applications/gnome-disks.desktop.bak
, Это скрывает дисковую утилиту от других, кроме пользователя root. После выполнения 'sudo sh-c ' chmod 755/usr/bin/gnome-disks & & mv/usr/share/applications/gnome-disks.desktop.bak/usr/share/applications/gnome-disks.desktop' это должно быть тихо, но диски гнома должны теперь быть доступными снова.
– Sergiy Kolodyazhnyy
11 June 2015 в 23:56
Midnight Commander ( mc
) также имеет хороший просмотрщик сжатых файлов, хотя я считаю это немного обманом, поскольку mc является файловым менеджером, хотя и основанный на тексте.
Кроме того, если все, что вам нужно, это посмотреть, что находится внутри сжатых архивов, вы можете изучить команду "view" для каждого компрессора. tar tzvf
покажет вам содержимое tar-файла, unzip -l
сделает это для zip-файла и т. Д.
Использование
просмотреть filename.tar.gz
тоже будет работать. почти так же, как и vim, но без разрешений на запись.
lesspipe
- это сценарий оболочки, установленный по умолчанию как часть пакета less
, который может отображать содержимое архива tar.gz
, а также ряд другие распространенные форматы архивных файлов.
$ lesspipe example.tar.gz
drwxrwxr-x ubuntu/ubuntu 0 2018-11-16 05:32 example/
-rw-rw-r-- ubuntu/ubuntu 7 2018-11-16 05:32 example/ask.txt
-rw-rw-r-- ubuntu/ubuntu 7 2018-11-16 05:32 example/ubuntu.txt
Он вызывается командой less
( см. ответ Оли ) в качестве входного препроцессора, если переменная среды $ LESSOPEN
равна
Если вы любите приключения, загляните в vi / usr / bin / lesspipe
, чтобы увидеть, какие команды он использует. Для файлов, соответствующих расширению tar.gz
, мы видим, что он использует под капотом tar tzvf
вместе с параметром - force-local
для отключения непонятная особенность tar
, которая в противном случае могла бы спутать двоеточия в имени файла с командой использования удаленного ленточного накопителя:
*.tar.gz|*.tgz|*.tar.z|*.tar.dz)
tar tzvf "$1" --force-local
Обратите внимание, что, поскольку он изначально разработан как препроцессор для less
, он ничего не выведет, если не распознает тип файла. Я заметил, что некоторые файлы .tar.gz
, которые я скачал, не работали, потому что они фактически не использовали сжатие gzip, несмотря на имя файла.
Если вы хотите просмотреть содержимое определенного файла в архиве без извлечения архивирование или запись на диск любым способом, используйте флаг -O (заглавная o) для записи в стандартный вывод вместо файла.
tar -Oxvf gerald.tar.gz /path/to/sandra.txt | less
Убедитесь, что O стоит перед f, иначе программа попытается проанализировать O как имя файла .