Bash Script para remover arquivos RAW que não possuem um arquivo JPEG correspondente [duplicado]

1

Eu fotografava minha câmera no modo RAW / JPEG, e como as imagens RAW são enormes (em tamanho de arquivo), demora uma eternidade para visualizá-las, então visualizo os JPEGs e excluo os que não quero.

Por exemplo, se eu tiver:

image1.CR2
image1.jpg
image2.CR2
image2.jpg
image3.CR2
image4.CR2
image5.CR2
...

Gostaria de excluir o .CR2 que não tem um .jpg correspondente (imagens de 3 a 5 neste exemplo).

Eu me deparei com o seguinte código:

rm *.CR2(e:'[[ ! -e ${REPLY%.CR2}.jpg ]]':)

mas não funciona na minha máquina. Eu não toquei no Bash nos anos do burro, então estou perdendo a tentativa de resolvê-lo.

Eu recebo o erro:

-bash: syntax error near unexpected token '('

Alguém pode me apontar na direção certa, por favor?

    
por Dave Melia 10.04.2018 / 00:20

1 resposta

4

Use apenas um loop:

for x in *.CR2
do
    [ -e "${x%.CR2}.jpg" ] || echo rm "$x"
done

Isso examina todos os arquivos .CR2 e chama x . ${x%.CR2} expande para o nome do arquivo com .CR2 removed , portanto nós adicionamos a extensão .jpg e verificamos se existe com -e . Se isso não acontecer, removemos o arquivo .CR2 original.

O texto acima tem um echo extra para que você possa verificar se está escolhendo os arquivos desejados antes de realmente excluir qualquer coisa. Você pode colocar tudo em uma linha, se quiser:

for x in *.CR2 ; do [ -e "${x%.CR2}.jpg" ] || echo rm "$x"; done

e será fácil editá-lo de forma interativa.

Alguns shells têm uma expansão de parâmetros mais poderosa que pode ser capaz de fazer isso, mas o Bash não é um deles. Eu suspeito que o código que você encontrou foi alvo de um desses.

    
por 10.04.2018 / 00:29

Tags