Я хочу увидеть содержимое (список файлов и папок) архива, например, tar.gz
файл без его распаковки .
Есть ли способы сделать это?
Я хочу увидеть содержимое (список файлов и папок) архива, например, tar.gz
файл без его распаковки .
Есть ли способы сделать это?
Ответы:
Запустите приведенную ниже команду в терминале, чтобы просмотреть содержимое файла tar.gz без его распаковки:
tar -tf filename.tar.gz
-t, --list Вывести
содержимое архива. Аргументы необязательны. Когда дано, они указывают имена членов для списка.
tar -tvf xxx.tgz
это также показывает подробные свойства файлов.
tree
tar -tf filename.tar.gz | tree
unzip -l
/unrar -l
Вы также можете использовать Vim
vim filename.tar.gz
ex +%p foo.tar.gz
.
vim file.tar.gz
), он говорит: «Выберите файл курсором и нажмите ENTER». Вы делаете это, перемещаете курсор на файл и нажимаете ENTER.
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
...
И потому, что это так less
, вы можете прокручивать его, искать его и т. Д. Однако это не помогает с другими алгоритмами сжатия (по моему опыту).
alias
специальных опций, less
которые вы здесь не показываете? Я просто попытался это увидеть, но это не сработало. У меня нет псевдонимов для less
.
Вы можете использовать команду г: zcat
, zless
, zgrep
.
Для просмотра содержимого файлов используйте:
zcat file.gz
Чтобы что-то использовать grep:
zgrep test file.gz
Чтобы проверить разницу между файлами, используйте:
zdiff file1.gz file2.gz
Это всего лишь несколько примеров, есть еще много.
tar
's -t
флаг будет перечислять содержимое для вас. Добавьте это к другим вашим флагам (например, -tvfz
a tar.gz
, -tvfj
a 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/file
dir1/subdir2/
dir1/subdir2/file
dir2/
zip
файлы
$ zip -sf foo.zip
Archive contains:
dir1/
dir2/
dir1/subdir1/
dir1/subdir1/file
dir1/subdir2/
dir1/subdir2/file
Total 6 entries (0 bytes)
7zip
файлы
$ 7z l foo.7z
7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,4 CPUs)
Listing archive: foo.7z
--
Path = foo.7z
Type = 7z
Solid = -
Blocks = 0
Physical Size = 168
Headers Size = 168
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
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 files, 4 folders
rar
файлы
$ rar v 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/subdir2/file
0 8 0% 30-03-15 19:00 -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/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чтобы открыть файл.
Midnight Commander ( mc
) также имеет хороший просмотрщик сжатых файлов, хотя я считаю это обманом, поскольку mc - файловый менеджер, хотя и текстовый.
Кроме того, если все, что вам нужно, это посмотреть, что находится внутри сжатых архивов, вы можете изучить команду «просмотр» для каждого компрессора. tar tzvf
покажет вам содержимое файла tar, unzip -l
сделает это для zip-файла и так далее.
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 как имя файла.