Me gustaría escanear mi disco duro en busca de todas las colecciones de archivos comprimidos como zip, gzip, bzip y otros, y tener el contenido de aquellos buscados para ciertos tipos de archivos (como imágenes). Anti-virus 'hacerlo, así que creo que debería haber una manera.
10

foopero nofoo.png.Respuestas:
El enfoque más simple sería enumerar el contenido del archivo y buscar archivos de la extensión relevante. Por ejemplo, con un
ziparchivo:La
-sfopción le indicazipque enumere los archivos contenidos en un archivo. Luego,grepbuscará uno.pngo.jpgque están al final de la línea ($). El-Epermite extenderse expresiones regulares, así que podemos usar|como O y la-ihace el caso coincidente insensible.Sin embargo, cada herramienta de archivo tiene un comando diferente para enumerar los contenidos. He escrito un guión que puede tratar con la mayoría de los más populares. Si guarda ese script como
list_compressed.sh, entonces podría ejecutar:Eso le mostraría los tipos de imágenes más comunes. Tenga en cuenta que este enfoque supone que el tipo de archivo puede determinarse por la extensión del archivo. No encontrará archivos de imagen que no tengan una extensión y no reconocerá archivos con la extensión incorrecta. No hay forma de lidiar con eso sin extraer los archivos del archivo y ejecutarlos
fileen cada uno de ellos.Si desea encontrar todos los archivos que contienen archivos de imagen en su disco duro, combine lo anterior con
find:El comando find buscará los materiales
.gz,.tgzo.ziparchivos (se puede añadir tantas extensiones como desee), los que a continuación se pasan a través de mi guión. Los-qsuprime grep salida normal, nada se imprimirán. El&& echoimprimirá el nombre del archivo sólo si elgreptuvo éxito.fuente
-namea-iname. Sin embargo, no tiene mucho sentido, muchos programas de compresión (gzip, por ejemplo) necesitan la extensión específica.GZno funcionaNo es tan avanzado como el terdon, pero esto servirá:
Guarde el siguiente código, en una carpeta donde reside todo su código, como
finda.sho cualquier otro nombre que desee:Luego, en un directorio donde están todos sus archivos, ejecútelo y esta es la salida:
fuente
*.*solo coincidirá con archivos con una extensión. Además, esto enumerará todos los archivos en todos los archivos, no está probando ningún tipo de archivo.