web-dev-qa-db-fra.com

Comment détecter des fichiers portant le même nom mais des extensions différentes?

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.)

6
Reza

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.

8
steeldriver