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

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

Eu tenho um diretório cujos arquivos têm extensão .JPG ou .NEF e quero excluir os arquivos no formato X.NEF para os quais X.JPG não existe no diretório. (X aqui pode ser qualquer string.) Não sei como fazer isso a não ser manualmente.

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

Responder1

Você pode usar os ${var%ext}recursos de substituição de parâmetros do shell para remover a extensão original 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 apenas cria 6 .NEFarquivos numerados file1.NEFe file6.NEFarquivos correspondentes .JPGpara 3 deles, ou seja, apenas alguns arquivos vazios para testar o segundo comando.

informação relacionada