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 .NEF
arquivos numerados file1.NEF
e file6.NEF
arquivos correspondentes .JPG
para 3 deles, ou seja, apenas alguns arquivos vazios para testar o segundo comando.