J'ai un répertoire dont les fichiers ont l'extension .JPG ou .NEF et je veux supprimer les fichiers de la forme X.NEF pour lesquels X.JPG n'existe pas dans le répertoire. (X peut être n'importe quelle chaîne.) Je ne sais pas comment le faire autrement que manuellement.
Une situation plus générale consiste à rechercher tous les fichiers d'un répertoire A qui existent également dans le répertoire B. (Le premier problème peut être transformé en second en utilisant mmv
.)
Vous pouvez utiliser les fonctions de substitution de paramètres ${var%ext}
du shell pour supprimer l'extension d'origine fichier par fichier: pour illustrer
touch file{1..6}.NEF file{1,2,4,6}.JPG
Ensuite
for nef in *.NEF; do [[ -f "${nef%.NEF}.JPG" ]] || echo rm -- "$nef"; done
résulte en
rm -- file3.NEF
rm -- file5.NEF
Explication:
La première commande crée simplement 6 fichiers .NEF
numérotés file1.NEF
à file6.NEF
et les fichiers .JPG
correspondants pour 3 d’entre eux, c.-à-d. Quelques fichiers vides pour tester la deuxième commande.