Quero saber como posso pesquisar um tipo de arquivo específico: entrei em um servidor SSH e estou tentando pesquisar um .jpg
arquivo, mas o proprietário do servidor (meu professor) removeu todas as extensões.
Eu tentei grep -lr "JFIF"
e encontrei muitos diretórios com o mesmo nome de arquivo, então pulei para um diretório aleatório que foi encontrado com o grep
comando e tentei usar o cat
comando nele, mas o terminal não conseguiu mostrar o binário inteiro.
Além disso o strings
comando está bloqueado no servidor ssh, meu professor disse que é preciso encontrar um arquivo jpg e que esse arquivo contém um número de série (SN), mas não tenho ideia de onde encontrá-lo.
Se vocês quiserem os cardeais SSH ficarei feliz em distribuí-los para vocês, de qualquer forma meu professor disse que vocês podem usar o file
comando para fazer isso, mas não sei como fazer.
Aliás: ele disse (SN)
Responder1
Vou tentar dar algumas dicas para que você mesmo resolva seu HW.
Siga estas etapas:
- leia o manual
file
executandoman file
. - Então experimente
file somefile
e veja o que acontece - Tente rodar
file
em diferentes tipos de arquivos - Agora você já deve saber como descobrir se algum arquivo é uma imagem jpeg ou não.
- agora leia o manual
find
(ou use o google para descobrir como usá-lo para encontrar todos os arquivos em algum diretório e todos os subdiretórios) - agora descubra como usar
-exec
a opção defind
para conectá-lo aofile
comando usado anteriormente - Agora você deve ser capaz de descobrir os tipos de arquivos de todos os arquivos no diretório necessário e listá-los
- Agora leia sobre pipes
|
egrep
comandos para descobrir como filtrar apenas arquivos JPEG.
Responder2
Em primeiro lugar quero agradecer ao @incBrain e ao @Serg por não responderem diretamente à minha pergunta, o que me ajudou a entender muitas coisas novas :).
Minha tarefa era encontrar um .jpg
arquivo específico cuja extensão foi removida, a primeira coisa que pensei foi.jpg
byte mágicoque era JFIF
, e com instruções @incBrain consegui construir este comando
find / -exec file {} \; | grep "JFIF"
essa linha vincula o find
comando ao file
comando usando -exec
, em seguida, obtém a saída de ambos os comandos find
& file
e a transfere como uma entrada através do símbolo de barra vertical |
para o grep
comando que mostra apenas os arquivos que contêm JFIF
em seu binário aka .jpg files
.
Meu problema na verdade era encontrar um número de série específico, a princípio pensei que o número de série estivesse incluído no binário do arquivo, mas estava errado, então um pensamento maluco me veio à mente
Oh! por que não vejo como é a foto, quero dizer, se não consigo encontrar o número de série, tirar a foto seria uma coisa boa
e procurei na Internet uma boa maneira de transferir arquivos do SSH para minha máquina e encontrei esse bloco de código que funcionou!
scp [email protected]:/home/example/file.txt /Local_Directory
Espero que esta resposta ajude alguém no futuro :).
Responder3
Uma solução possível poderia ser esta: use find
que lista recursivamente os arquivos regulares ( -type f
) e executa file
comandos sobre cada um deles. Redirecione a saída para grep
para filtrar os tipos de arquivos.
Porém aqui, eu gostaria de fazer algo mais divertido do que isso; mais estranho, mas mais divertido.
$ find . -maxdepth 1 -type f -printf "%f\t" -exec hexdump -n8 {} \; | awk '/d8ff e0ff 1000 464a/{print $1}'
Como você pode ou não saber, cada arquivo tem os primeiros 8 bytes de qualquer arquivo que designam o tipo de arquivo. Assim, find
procuramos todos os arquivos regulares, imprimimos seu nome, mas depois executamos hexdump para extrair os primeiros 8 bytes e deixamos awk
filtrar apenas os nomes de arquivos que possuem os primeiros 8 bytes.
Aqui está uma pequena prova:
$ 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
Responder4
file * | grep -i "jpeg"
Isso pesquisará todos os arquivos no diretório e retornará seu tipo de arquivo. Através do Pipe, |
esses resultados são pesquisados pelo grep para encontrar o arquivo com o tipo de arquivo "jpeg" ou basicamente um arquivo .jpg.