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
foo
pero 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
zip
archivo:La
-sf
opción le indicazip
que enumere los archivos contenidos en un archivo. Luego,grep
buscará uno.png
o.jpg
que están al final de la línea ($
). El-E
permite extenderse expresiones regulares, así que podemos usar|
como O y la-i
hace 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
file
en 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
,.tgz
o.zip
archivos (se puede añadir tantas extensiones como desee), los que a continuación se pasan a través de mi guión. Los-q
suprime grep salida normal, nada se imprimirán. El&& echo
imprimirá el nombre del archivo sólo si elgrep
tuvo éxito.fuente
-name
a-iname
. Sin embargo, no tiene mucho sentido, muchos programas de compresión (gzip, por ejemplo) necesitan la extensión específica.GZ
no 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.sh
o 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.