Chcę zobaczyć zawartość (listę plików i folderów) archiwum, na przykład tar.gz
plik bez rozpakowywania go.
Czy są na to jakieś metody?
Chcę zobaczyć zawartość (listę plików i folderów) archiwum, na przykład tar.gz
plik bez rozpakowywania go.
Czy są na to jakieś metody?
Odpowiedzi:
Uruchom poniższe polecenie w terminalu, aby zobaczyć zawartość pliku tar.gz bez wypakowywania go:
tar -tf filename.tar.gz
-t, --list Wyświetla
zawartość archiwum. Argumenty są opcjonalne. Po podaniu określają nazwiska członków do wyświetlenia.
tar -tvf xxx.tgz
pokazałoby to również szczegółowe właściwości plików.
tree
tar -tf filename.tar.gz | tree
unzip -l
/unrar -l
Możesz także użyć vima
vim filename.tar.gz
ex +%p foo.tar.gz
.
vim file.tar.gz
) pojawia się komunikat „Wybierz plik za pomocą kursora i naciśnij ENTER”. Po prostu przesuń kursor nad plikiem i naciśnij ENTER.
less
może również otwierać archiwa gz
skompresowane i nieskompresowane tar
. Zapewnia również piękny efekt ls -l
wyjściowy:
$ 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
...
A ponieważ jest less
, możesz go przewijać, przeszukiwać itp. Jednak nie udaje mu się to z innymi algorytmami kompresji (z mojego doświadczenia).
alias
specjalnych opcji less
, których tu nie pokazujesz? Próbowałem to zobaczyć, ale to nie działało. Nie mam skonfigurowanych aliasów less
.
tar
„s -t
flag wyświetli zawartość dla Ciebie. Dodaj to do innych flag (tak -tvfz
dla a tar.gz
, -tvfj
a tar.bz2
, itp.) I możesz przeglądać bez rozpakowywania. Stamtąd można dość łatwo wyodrębnić pojedyncze pliki
tar -xvfz mybackup.tar.gz path/to/file
Dużym problemem tar
jest zapamiętywanie wszystkich pozostałych flag . Dlatego zwykle polegam na 7z
(w p7zip-full
pakiecie) na całej archiwizacji. Nie twierdzę, że jest całkowicie lepszy, ale obsługuje prawie wszystko (bez konieczności określania typu kompresji), a argumenty są logiczne.
7z l archive.ext
7z e archive.ext path/to/file
Z pewnością jest mniej zdolny, ale nie potrzebujesz strony podręcznika, aby z niego korzystać.
Istnieje również Midnight Commander ( mc
). Jest to wszechstronne narzędzie do quasi-graficznego zarządzania plikami opartymi na terminalach, a po lekkich testach pozwala tylko przeglądać zarówno archiwa, jak .tar.gz
i .7z
archiwa. Nie jestem pewien, ile innych obsługuje.
To zależy od pliku. Większość programów (de) kompresji ma flagę z listą zawartości archiwum.
tar
Pliki / 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
akta
$ zip -sf foo.zip
Archive contains:
dir1/
dir2/
dir1/subdir1/
dir1/subdir1/file
dir1/subdir2/
dir1/subdir2/file
Total 6 entries (0 bytes)
7zip
akta
$ 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
akta
$ 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%
To większość popularnych formatów archiwów. Mając to na uwadze, możesz napisać mały skrypt, który używa odpowiedniej komendy, w zależności od rozszerzenia pliku, który jej podajesz:
#!/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
Zapisz ten skrypt w swoim PATH
pliku i wykonaj go. Następnie możesz wyświetlić zawartość dowolnego archiwum:
$ 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)
A ponieważ ktoś wspomniał o tym mniejszym edytorze, oczywiście emacs może to zrobić:
Dlaczego nie użyć vim
do przeglądania swojego archiwum i otwierania plików (przynajmniej plików tekstowych):
vim archive.tar.gz
Naciskaj klawisze strzałek, aby przewijać i Enterotwierać plik.
Midnight Commander ( mc
) ma również dobrą, skompresowaną przeglądarkę plików, chociaż uważam to za trochę oszukiwania, ponieważ mc jest menedżerem plików, choć tekstowym.
Ponadto, jeśli chcesz tylko zobaczyć, co znajduje się w skompresowanych archiwach, możesz nauczyć się polecenia „widok” dla każdej sprężarki. tar tzvf
pokaże zawartość pliku tar, unzip -l
zrobi to dla pliku zip i tak dalej.
lesspipe
to skrypt powłoki instalowany domyślnie jako część less
pakietu, który może wyświetlać zawartość tar.gz
archiwum, a także szereg innych popularnych formatów plików archiwów.
$ 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
Jest wywoływany przez less
polecenie ( patrz odpowiedź Oli ) jako preprocesor wejściowy, jeśli $LESSOPEN
zmienna środowiskowa jest odpowiednio ustawiona.
Jeśli masz ochotę na przygodę, zrób szczyt, vi /usr/bin/lesspipe
aby zobaczyć, jakich poleceń używa. W przypadku plików pasujących do tar.gz
rozszerzenia widzimy, że używa ono tar tzvf
pod maską wraz z --force-local
opcją wyłączenia niejasnej funkcji tar
, która w przeciwnym razie pomieszałaby dwukropki w nazwie pliku z poleceniem użycia zdalnego napędu taśmowego:
*.tar.gz|*.tgz|*.tar.z|*.tar.dz)
tar tzvf "$1" --force-local
Zauważ, że ponieważ jest przede wszystkim zaprojektowany jako preprocesor less
, nie wypisze niczego, jeśli nie rozpozna typu pliku. Zauważyłem, że niektóre .tar.gz
pliki, które pobrałem, nie będą działać, ponieważ w rzeczywistości nie używają kompresji gzip pomimo nazwy pliku.
Jeśli chcesz wyświetlić zawartość określonego pliku w archiwum bez wyodrębniania go lub zapisywania na dysk w jakikolwiek sposób, użyj flagi -O (wielka o), aby zapisać na standardowe wyjście zamiast pliku.
tar -Oxvf gerald.tar.gz /path/to/sandra.txt | less
Upewnij się, że O jest przed f lub spróbuje parsować O jako nazwę pliku.