Quiero saber cómo puedo buscar un tipo de archivo específico: he ingresado a un servidor SSH y estoy intentando buscar un .jpg
archivo, pero el propietario del servidor (mi maestro) ha eliminado todas las extensiones.
Lo intenté grep -lr "JFIF"
y encontré muchos directorios con el mismo nombre de archivo, así que salté a un directorio aleatorio que se encontró con el grep
comando e intenté usar el cat
comando en él, pero la terminal no pudo mostrar el binario completo.
Además el strings
comando está bloqueado en el servidor ssh, mi profesor dijo que hay que buscar un archivo jpg y que este archivo contiene un número de serie (SN), pero no tengo idea de dónde encontrarlo.
Si quieren los cardenales SSH, estaré feliz de entregárselos; de todos modos, mi maestro dijo que pueden usar el file
comando para hacerlo, pero no sé cómo hacerlo.
Por cierto: dijo (SN)
Respuesta1
Intentaré darte algunos consejos para que puedas resolver tu HW tú mismo.
Siga estos pasos:
- lea el manual de
file
ejecutandoman file
. - Luego pruébalo
file somefile
y mira qué pasa. - Intente ejecutar
file
en diferentes tipos de archivos - A estas alturas ya deberías poder entender cómo saber si un archivo es una imagen jpeg o no.
- ahora lea el manual
find
(o use Google para descubrir cómo usarlo para encontrar todos los archivos en algún directorio y todos los subdirectorios) - ahora descubra cómo usar
-exec
la opción defind
para conectarla confile
el comando usado anteriormente - Ahora debería poder encontrar los tipos de archivos de todos los archivos en el directorio necesario y enumerarlos.
- Ahora lea sobre canalizaciones
|
ygrep
comandos para descubrir cómo filtrar sólo para archivos JPEG.
Respuesta2
En primer lugar, quiero agradecer a @incBrain y @Serg por no responder mi pregunta directamente, lo que me ayudó a comprender muchas cosas nuevas :).
Mi tarea era encontrar un .jpg
archivo específico al que se le haya eliminado la extensión, lo primero que pensé es.jpg
byte mágicoque era JFIF
, y con las instrucciones de @incBrain pude crear este comando
find / -exec file {} \; | grep "JFIF"
esa línea vincula el find
comando al file
comando usando -exec
luego obtiene la salida de ambos comandos find
& file
y la transfiere como entrada a través del símbolo de canalización |
para el grep
comando que muestra solo los archivos que contienen JFIF
en su binario también conocido como .jpg files
.
Mi problema en realidad fue encontrar un número de serie específico, al principio pensé que el número de serie estaba incluido en el archivo binario, pero eso estaba mal, luego me vino a la mente una idea loca.
¡Oh! ¿Por qué no veo cómo se ve la imagen? Quiero decir, si no puedo encontrar el número de serie, sería bueno obtener la imagen.
¡Busqué en Internet una buena manera de transferir archivos desde SSH a mi máquina y encontré este bloque de código que funcionó!
scp [email protected]:/home/example/file.txt /Local_Directory
Espero que esta respuesta ayude a alguien en el futuro :).
Respuesta3
Una posible solución podría ser esta: use find
el cual enumera recursivamente archivos normales ( -type f
) y ejecuta file
comandos sobre cada uno de ellos. Redirigir la salida a grep
para filtrar los tipos de archivos.
Sin embargo, aquí me gustaría hacer algo más divertido que eso; Más incómodo, pero más divertido.
$ find . -maxdepth 1 -type f -printf "%f\t" -exec hexdump -n8 {} \; | awk '/d8ff e0ff 1000 464a/{print $1}'
Como puede que sepa o no, cada archivo tiene los primeros 8 bytes de cualquier archivo que designan el tipo de archivo. Por lo tanto, find
buscamos todos los archivos normales, imprimimos su nombre, pero luego ejecutamos hexdump para extraer los primeros 8 bytes y filtramos awk
solo aquellos nombres de archivo que tienen esos primeros 8 bytes.
He aquí una pequeña prueba:
$ hexdump -n 10 1450763029649.jpg
0000000 d8ff e0ff 1000 464a 4649
000000a
$ hexdump -C -n 10 1450763029649.jpg
00000000 ff d8 ff e0 00 10 4a 46 49 46 |......JFIF|
0000000a
Respuesta4
file * | grep -i "jpeg"
Esto buscará en cada archivo del directorio y devolverá su tipo de archivo. A través de Pipe |
, grep busca estos resultados para encontrar el archivo con el tipo de archivo "jpeg" o básicamente un archivo .jpg.