Voglio vedere il contenuto (elenco di file e cartelle) di un archivio, ad esempio un tar.gz
file senza estrarlo .
Ci sono metodi per farlo?
Voglio vedere il contenuto (elenco di file e cartelle) di un archivio, ad esempio un tar.gz
file senza estrarlo .
Ci sono metodi per farlo?
Risposte:
Esegui il comando seguente nel terminale per vedere il contenuto di un file tar.gz senza estrarlo:
tar -tf filename.tar.gz
-t, --list
Elenca i contenuti di un archivio. Gli argomenti sono facoltativi. Quando dati, specificano i nomi dei membri da elencare.
tar -tvf xxx.tgz
questo mostrerebbe anche le proprietà di dettaglio dei file.
tree
per vedere una vista ad alberotar -tf filename.tar.gz | tree
unzip -l
/unrar -l
Puoi anche usare vim
vim filename.tar.gz
ex +%p foo.tar.gz
.
vim file.tar.gz
), dice "Seleziona un file con cursore e premi INVIO". Fai proprio questo, sposta il cursore su un file e premi INVIO.
less
può anche aprire archivi gz
non compressi e non compressi tar
. Ti dà anche un ls -l
output di stile delizioso :
$ 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
...
E poiché è less
possibile scorrere, cercare, ecc. Tuttavia, fallisce miseramente con altri algoritmi di compressione (nella mia esperienza).
alias
opzioni speciali per less
quello che non stai mostrando qui? Ho appena provato a vederlo, ma non ha funzionato. Non ho alcun alias impostato per less
.
È possibile utilizzare il comando z: zcat
, zless
, zgrep
.
Per visualizzare un contenuto di file utilizzare:
zcat file.gz
Per grep usare qualcosa:
zgrep test file.gz
Per verificare la differenza tra i file utilizzare:
zdiff file1.gz file2.gz
Questi sono solo alcuni esempi, ce ne sono molti altri.
tar
la -t
bandiera elencherà i contenuti per te. Aggiungilo agli altri flag (quindi -tvfz
per a tar.gz
, -tvfj
per a tar.bz2
, ecc.) E puoi navigare senza estrarre. Da lì puoi estrarre singoli file abbastanza facilmente
tar -xvfz mybackup.tar.gz path/to/file
Il grosso problema tar
è ricordare tutte le altre bandiere . Quindi di solito mi affido 7z
(del p7zip-full
pacchetto) per fare tutta la mia archiviazione. Non pretendo che sia del tutto migliore ma supporta quasi tutto (senza dover specificare il tipo di compressione) e gli argomenti sono logici.
7z l archive.ext
7z e archive.ext path/to/file
È sicuramente meno capace, ma non è necessaria la pagina man per usarla.
C'è anche Midnight Commander ( mc
). Questo è un vero e proprio tuttofare per la gestione quasi grafica di file basati su terminali e con alcuni test leggeri ti consente di navigare in entrambi .tar.gz
e negli .7z
archivi. Non sono sicuro di quanti altri supporti.
Bene, questo dipende dal file. La maggior parte dei (de) programmi di compressione ha un flag che elenca i contenuti di un archivio.
tar
/ tar.gz
/ tgz
/ tar.xz
/ tar.bz2
/ tbz
files
$ tar tf foo.tgz
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/subdir2/
dir1/subdir2/file
dir2/
zip
File
$ zip -sf foo.zip
Archive contains:
dir1/
dir2/
dir1/subdir1/
dir1/subdir1/file
dir1/subdir2/
dir1/subdir2/file
Total 6 entries (0 bytes)
7zip
File
$ 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
File
$ 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%
Questo è la maggior parte dei formati di archivio più popolari. Con tutto questo in mente, potresti scrivere un piccolo script che utilizza il comando appropriato a seconda dell'estensione del file che gli dai:
#!/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
Salva quello script nel tuo PATH
e rendilo eseguibile. È quindi possibile elencare i contenuti di qualsiasi archivio:
$ 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)
E dal momento che qualcuno ha detto che l'editor minore, naturalmente, anche emacs può fare questo:
Perché non usare vim
per sfogliare il tuo archivio e aprire file (almeno file di tipo testuale):
vim archive.tar.gz
Premere i tasti freccia per scorrere e Enterper aprire un file.
Midnight Commander ( mc
) ha anche un buon visualizzatore di file compressi, anche se lo considero un po 'imbroglione poiché mc è un file manager, anche se basato su testo.
Inoltre, se tutto ciò che vuoi è vedere cosa c'è negli archivi compressi, puoi imparare il comando "view" per ogni compressore. tar tzvf
ti mostrerà il contenuto di un file tar, unzip -l
lo farà per un file zip e così via.
lesspipe
è uno script di shell installato di default come parte del less
pacchetto che può elencare il contenuto di un tar.gz
archivio, nonché una gamma di altri formati di file di archivio comuni.
$ 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
Viene chiamato dal less
comando ( vedere la risposta di Oli ) come preprocessore di input se la $LESSOPEN
variabile di ambiente è impostata in modo appropriato.
Se ti senti avventuroso, prova vi /usr/bin/lesspipe
a vedere quali comandi utilizza. Per i file che corrispondono tar.gz
all'estensione, possiamo vedere che utilizza tar tzvf
sotto il cofano insieme --force-local
all'opzione per disabilitare una funzione oscura tar
che altrimenti confonderebbe i due punti nel nome del file con un comando per utilizzare un'unità nastro remota:
*.tar.gz|*.tgz|*.tar.z|*.tar.dz)
tar tzvf "$1" --force-local
Si noti che poiché è principalmente progettato come preprocessore less
, non produrrà nulla se non riconosce il tipo di file. Ho notato che alcuni .tar.gz
file che ho scaricato non funzionavano perché in realtà non utilizzavano la compressione gzip nonostante il nome del file.
Se si desidera visualizzare il contenuto di un file specifico all'interno di un archivio senza estrarre l'archivio o scrivere su disco in alcun modo, utilizzare il flag -O (maiuscolo o) per scrivere su stdout anziché su un file.
tar -Oxvf gerald.tar.gz /path/to/sandra.txt | less
Assicurati che la O preceda la f o proverà ad analizzare la O come nome di file.