Voglio vedere il contenuto (elenco di file e cartelle) di un archivio, ad esempio un tar.gzfile senza estrarlo .
Ci sono metodi per farlo?
Voglio vedere il contenuto (elenco di file e cartelle) di un archivio, ad esempio un tar.gzfile 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.tgzquesto mostrerebbe anche le proprietà di dettaglio dei file.
treeper 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.
lesspuò anche aprire archivi gznon compressi e non compressi tar. Ti dà anche un ls -loutput 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é è lesspossibile scorrere, cercare, ecc. Tuttavia, fallisce miseramente con altri algoritmi di compressione (nella mia esperienza).
aliasopzioni speciali per lessquello 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.
tarla -tbandiera elencherà i contenuti per te. Aggiungilo agli altri flag (quindi -tvfzper a tar.gz, -tvfjper 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-fullpacchetto) 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.gze negli .7zarchivi. 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/ tbzfiles
$ 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 PATHe 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 vimper 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 tzvfti mostrerà il contenuto di un file tar, unzip -llo farà per un file zip e così via.
lesspipeè uno script di shell installato di default come parte del lesspacchetto che può elencare il contenuto di un tar.gzarchivio, 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 lesscomando ( vedere la risposta di Oli ) come preprocessore di input se la $LESSOPENvariabile di ambiente è impostata in modo appropriato.
Se ti senti avventuroso, prova vi /usr/bin/lesspipea vedere quali comandi utilizza. Per i file che corrispondono tar.gzall'estensione, possiamo vedere che utilizza tar tzvfsotto il cofano insieme --force-localall'opzione per disabilitare una funzione oscura tarche 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.gzfile 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.