Exclua todas as imagens tiradas com uma câmera específica

4

O que eu preciso:

Um comando que exclui todos os arquivos .jpg no diretório e subdiretórios atuais que foram obtidos com uma Câmera RaspberryPi.

(O ideal seria que isso funcionasse com o Git Bash para Windows, mas isso tornaria isso mais conveniente e, portanto, opcional.)

O que eu tentei:

Eu já usei find . -name "*.jpg" -size 24k -delete para excluir miniaturas e descobri que o utilitário file é capaz de exibir o fabricante da câmera ( manufacturer=RaspberryPi ).

Exemplo:

$ file f49100889.jpg
f49100889.jpg: JPEG image data, Exif standard: [TIFF image data,
big-endian, direntries=10, height=0, manufacturer=RaspberryPi, 
model=RP_OV5647, xresolution=156, yresolution=164, resolutionunit=2, 
datetime=2015:06:09 08:15:03, width=0], baseline, precision 8, 
1920x1080, frames 3

Histórico:

O sistema de arquivos de uma unidade NTFS foi corrompido e eu restaurei os arquivos usando testdisk / photorec. Agora eu tenho os arquivos, mas perdi alguns metadados, como a estrutura de diretórios e nomes de arquivos. Eu restaurei os arquivos mais importantes de um backup e gostaria de recuperar o máximo possível dos dados restantes. Eu preciso excluir alguns arquivos de lixo para facilitar o trabalho com o resto.

É possível combinar esses comandos para atingir meu objetivo? Se sim, como? Existe uma maneira melhor de fazer isso?

Agradecemos antecipadamente!

    
por Maurice 29.12.2016 / 02:20

1 resposta

3

Aqui está uma maneira simples. Abaixo está o conteúdo de um script chamado script.sh in ~/bin/ .

#!/usr/bin/env bash
if (file "$1" | grep "RaspberryPi"); then
    echo "rm $1" # <- safety first: just echo, no delete
    # rm "$1" # <- uncomment to delete, leave the quotes
fi

Conceda permissão para executar ( chmod 0750 ~/bin/script.sh ). Em seguida, localize os arquivos e passe os resultados, um de cada vez (usando \; , não + ) para o script.

find ~ -iname *.jpg 2>/dev/null -exec ~/bin/script.sh {} \;

Outra ferramenta é identify do ImageMagick. Esta ferramenta descreve as características da imagem e lê os dados da imagem, incluindo o EXIF. Seria muito mais lento que file , mas há muito mais informações na imagem do que as informações fornecidas por file . Pode ajudar quando file não descrever os dados a serem encontrados. Seu uso pode ser o seguinte.

identify -verbose "$file" | grep "RaspberryPi"

Podemos testar o código de retorno de grep (depois de usar file ou identify na instrução if , acima) exibindo seu código de retorno. De man grep :

Normally the exit status is 0 if a line is selected, 1 if no lines were selected, and 2 if an error occurred.

Combine essas informações com o conhecimento de que a variável $? contém o código / valor de retorno ou o código / valor de saída do último comando executado.

file image.jpg | grep "RaspberryPi"
echo $?

As linhas acima produziriam um valor igual a zero - correspondência encontrada - para file resultados que contêm a string "RaspberryPi".

file image.jpg | grep "Rumpelstiltskin"
echo $?

As linhas acima produziriam um valor de um - sem correspondência - assumindo que file não encontrou correspondência para a string, "Rumpelstiltskin".

    
por 29.12.2016 / 03:37