Como detectar arquivos com o mesmo nome, mas extensões diferentes?

6

Eu tenho um diretório cujos arquivos possuem extensão .JPG ou .NEF e desejo excluir os arquivos do formato X.NEF para o qual o X.JPG não existe no diretório. (X aqui pode ser qualquer string.) Eu não sei como fazer isso a não ser à mão.

Uma situação mais geral é quando você quer encontrar todos os arquivos em um diretório A que também existe no diretório B. (O primeiro problema pode ser transformado no segundo usando mmv .)

    
por Reza 12.06.2015 / 13:45

1 resposta

8

Você pode usar os recursos de substituição do parâmetro ${var%ext} do shell para remover a extensão original em uma base por arquivo: para ilustrar

touch file{1..6}.NEF file{1,2,4,6}.JPG

Então

for nef in *.NEF; do [[ -f "${nef%.NEF}.JPG" ]] || echo rm -- "$nef"; done

resulta em

rm -- file3.NEF
rm -- file5.NEF

Explicação:

O primeiro comando cria apenas 6% dos arquivos.NEF numerados file1.NEF para file6.NEF e os arquivos .JPG correspondentes para 3 deles, ou seja, apenas alguns arquivos vazios para testar o segundo comando.

    
por steeldriver 12.06.2015 / 14:05