Я хочу побачити вміст (список файлів і папок) архіву, наприклад 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
.
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
Це, звичайно, менш спроможне, але для його використання вам не потрібна сторінка "man".
Є також командир опівночі ( 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 є файловим менеджером, хоча і текстовим.
Крім того, якщо все, що ви хочете, це побачити, що знаходиться всередині стислих архівів, ви можете вивчити команду "view" для кожного компресора. 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 (з великої літери) для запису в stdout замість файлу.
tar -Oxvf gerald.tar.gz /path/to/sandra.txt | less
Переконайтесь, що O надходить до f або він спробує розібрати O як ім'я файлу.