web-dev-qa-db-fra.com

Existe-t-il un moyen de rechercher des fichiers en tenant également compte du contenu des archives?

J'essaie de trouver un (très ancien) fichier, dont je suis sûr qu'il se trouve quelque part sur mon NAS. Malheureusement, certains de mes anciens fichiers sont stockés dans tar.gz, Zip ou 7z.

Existe-t-il un moyen de rechercher tous les fichiers et dossiers, y compris le contenu de ces archives?

Peut-être que find ou locate peut être chargé de prendre également en compte ces archives et de jeter un œil à l'intérieur de leur chemin dans l'arborescence des répertoires?

2
kerner1000

Vous pouvez rechercher dans chaque type d'archive particulier comme suit:

cd /dir/where/you/want/to/start/search
find . -iname '*.Zip' -exec unzip -l {} \; | grep 'file_pattern'
find . -iname '*.tar.gz' -exec tar tvf {} \; | grep 'file_pattern'
find . -iname '*.7z' -exec 7z l {} \; | grep 'file_pattern'

Vous pouvez simplifier son utilisation en recherchant toujours en commençant dans le répertoire courant, et en acceptant le modèle de correspondance de fichier (qui pourrait inclure des expressions régulières ou simplement être tout ou partie du nom de fichier) comme paramètre de ligne de commande:

Créez un script (nommé, par exemple "arcsearch") dans votre chemin exécutable (par exemple/usr/local/bin), en vous assurant de le "chmod + x" pour le rendre exécutable, avec ce contenu:

find . -iname $1
find . -iname '*.Zip' -exec unzip -l {} \; | grep $1
find . -iname '*.tar.gz' -exec tar tvf {} \; | grep $1
find . -iname '*.7z' -exec 7z l {} \; | grep $1

Ensuite, vous pouvez simplement taper:

arcfind whatever_you_want

et il crachera les résultats, à la fois les fichiers "normaux" et ceux des archives.

4
Charles Boling