Comment puis-je obtenir la liste de tous les fichiers d'archive dans un dossier de manière récursive sans connaître l'extension du fichier?
Vous pouvez utiliser l'utilitaire file
pour tenter de classer un fichier en fonction d'une séquence de tests de système de fichiers, de tests magiques et de tests de langue - par exemple
$ file pynauty-0.5.tar
pynauty-0.5.tar: POSIX tar archive (GNU)
$ file opencv-2.4.10.Zip
opencv-2.4.10.Zip: Zip archive data, at least v1.0 to extract
Lorsqu'il est exécuté sur des fichiers compressés, la valeur par défaut consiste simplement à signaler qu'il contient des "données compressées", mais vous pouvez modifier ce comportement à l'aide de -z
commutateur
-z, --uncompress
Try to look inside compressed files.
c'est à dire.
$ file -b octave-4.0.0.tar.gz
gzip compressed data, from Unix, last modified: Tue May 26 12:35:47 2015, max compression
tandis que
$ file -zb octave-4.0.0.tar.gz
POSIX tar archive (gzip compressed data, from Unix, last modified: Tue May 26 12:35:47 2015, max compression)
Sur cette base, vous pouvez essayer d'exécuter file -zb
dans une commande find
et grep
ing pour le mot "archive
": quelque chose comme
find . -type f -exec sh -c 'file -zb "$1" | grep -q "archive"' _ {} \; -print
Le -b
switch empêche les fausses correspondances sur le nom de fichier.
Vous pouvez vérifier le type de fichier avec cette commande pour une archive/fichier sans extension:
% file tar-latest
tar-latest: XZ compressed data
ou un autre exemple:
% file foo
foo: Zip archive data, at least v2.0 to extract
Pour lister toutes les archives
find . -type f -exec file {} \; | awk '/compressed|archive/'
Exemple
% find . -type f -exec file {} \; | awk '/compressed|archive/'
./tar-latest: XZ compressed data
./foo: Zip archive data, at least v2.0 to extract