Je souhaite voir le contenu (liste de fichiers et de dossiers) d'une archive, par exemple un tar.gz
fichier sans l'extraire .
Y a-t-il des méthodes pour le faire?
Je souhaite voir le contenu (liste de fichiers et de dossiers) d'une archive, par exemple un tar.gz
fichier sans l'extraire .
Y a-t-il des méthodes pour le faire?
Réponses:
Exécutez la commande ci-dessous dans le terminal pour afficher le contenu d'un fichier tar.gz sans l'extraire:
tar -tf filename.tar.gz
-t, --list
Répertorie le contenu d'une archive. Les arguments sont facultatifs. Une fois donnés, ils spécifient les noms des membres à lister.
tar -tvf xxx.tgz
cela montrerait aussi les propriétés de détail des fichiers.
tree
voir une vue d'arbretar -tf filename.tar.gz | tree
unzip -l
/unrar -l
Vous pouvez aussi utiliser vim
vim filename.tar.gz
ex +%p foo.tar.gz
.
vim file.tar.gz
), il indique "Sélectionnez un fichier avec le curseur et appuyez sur ENTREE". Pour ce faire, déplacez le curseur sur un fichier et appuyez sur ENTREE.
less
peut également ouvrir des archives gz
compressées et non compressées tar
. Cela vous donne aussi une belle ls -l
sortie de style:
$ 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
...
Et parce que c'est possible less
, vous pouvez le parcourir, le rechercher, etc. Cependant, il échoue lamentablement avec d'autres algorithmes de compression (selon mon expérience).
alias
d’options spéciales pour less
ce que vous n’affichez pas ici? J'ai juste essayé de voir ça, mais ça n'a pas marché. Je n'ai aucun alias configuré pour less
.
Vous pouvez utiliser la commande z: zcat
, zless
, zgrep
.
Pour afficher un contenu de fichiers, utilisez:
zcat file.gz
Pour utiliser quelque chose, utilisez:
zgrep test file.gz
Pour vérifier la différence entre les fichiers, utilisez:
zdiff file1.gz file2.gz
Ce ne sont que quelques exemples, il y en a beaucoup plus.
tar
Le -t
drapeau de ' listera le contenu pour vous. Ajoutez-le à vos autres drapeaux (donc -tvfz
pour un tar.gz
, -tvfj
pour un tar.bz2
, etc.) et vous pourrez naviguer sans extraire. De là, vous pouvez extraire des fichiers simples assez facilement
tar -xvfz mybackup.tar.gz path/to/file
Le gros problème avec tar
se souvenir de tous les autres drapeaux . Donc, je compte habituellement sur 7z
(du p7zip-full
paquet) pour faire tout mon archivage. Je ne prétends pas que c'est tout à fait meilleur, mais il supporte presque tout (sans avoir à spécifier le type de compression) et les arguments sont logiques.
7z l archive.ext
7z e archive.ext path/to/file
C'est certainement moins capable, mais vous n'avez pas besoin de la page de manuel pour l'utiliser.
Il y a aussi Midnight Commander ( mc
). Il s’agit d’une solution polyvalente pour la gestion de fichiers quasi-graphique basée sur un terminal et, avec quelques essais, elle vous permet simplement de naviguer dans les deux .tar.gz
et dans les .7z
archives. Je ne suis pas sûr de combien d'autres il prend en charge.
Cela dépend du fichier. La plupart des programmes de (dé) compression ont un indicateur qui répertorie le contenu d'une archive.
tar
/ tar.gz
/ tgz
/ tar.xz
/ tar.bz2
/ tbz
fichiers
$ tar tf foo.tgz
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/subdir2/
dir1/subdir2/file
dir2/
zip
des dossiers
$ zip -sf foo.zip
Archive contains:
dir1/
dir2/
dir1/subdir1/
dir1/subdir1/file
dir1/subdir2/
dir1/subdir2/file
Total 6 entries (0 bytes)
7zip
des dossiers
$ 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
des dossiers
$ 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%
C'est la plupart des formats d'archives les plus populaires. En gardant tout cela à l’esprit, vous pourriez écrire un petit script qui utilise la commande appropriée en fonction de l’extension du fichier que vous lui donnez:
#!/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
Enregistrez ce script dans votre PATH
et le rendre exécutable. Vous pouvez ensuite lister le contenu de n'importe quelle archive:
$ 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)
Et puisque quelqu'un a mentionné que l'éditeur inférieur, naturellement, emacs peut aussi le faire:
Pourquoi ne pas utiliser vim
pour parcourir vos archives et ouvrir des fichiers (au moins des fichiers de type texte):
vim archive.tar.gz
Appuyez sur les touches fléchées pour faire défiler et Enterouvrir un fichier.
Midnight Commander ( mc
) a également une bonne visionneuse de fichiers compressés, même si j’estime qu’il faut tricher, car mc est un gestionnaire de fichiers, même s'il est basé sur du texte.
De plus, si tout ce que vous voulez, c'est voir ce qu'il y a dans les archives compressées, vous pouvez apprendre la commande "view" pour chaque compresseur. tar tzvf
vous montrera le contenu d'un fichier tar, le unzip -l
fera pour un fichier zip, etc.
lesspipe
est un script shell installé par défaut dans le less
package permettant de répertorier le contenu d'une tar.gz
archive, ainsi que de nombreux autres formats de fichiers d'archives courants.
$ 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
Il est appelé par la less
commande ( voir la réponse d'Oli ) en tant que préprocesseur d'entrée si la $LESSOPEN
variable d'environnement est définie correctement.
Si vous vous sentez aventureux, surveillez de près vi /usr/bin/lesspipe
les commandes qu'il utilise. Pour les fichiers correspondant à l' tar.gz
extension, nous pouvons voir qu'il utilise tar tzvf
sous le capot avec la --force-local
possibilité de désactiver une fonctionnalité obscure de tar
celle-ci qui confondrait les deux points du nom du fichier avec une commande permettant d'utiliser un lecteur de bande distant:
*.tar.gz|*.tgz|*.tar.z|*.tar.dz)
tar tzvf "$1" --force-local
Notez qu’étant donné qu’il est principalement conçu comme un préprocesseur less
, il n’affiche rien s’il ne reconnaît pas le type de fichier. J'ai remarqué que certains .tar.gz
fichiers que j'avais téléchargés ne fonctionnaient pas car ils n'utilisaient pas la compression gzip malgré le nom du fichier.
Si vous souhaitez afficher le contenu d'un fichier spécifique dans une archive sans extraire l'archive ni écrire sur le disque, utilisez l'indicateur -O (capital o) pour écrire sur stdout au lieu d'un fichier.
tar -Oxvf gerald.tar.gz /path/to/sandra.txt | less
Assurez-vous que le O vient avant le f ou il essaiera d'analyser le O comme un nom de fichier.