¿Cómo detectar archivos con el mismo nombre pero con diferentes extensiones?

¿Cómo detectar archivos con el mismo nombre pero con diferentes extensiones?

Tengo un directorio cuyos archivos tienen extensión .JPG o .NEF y quiero eliminar los archivos del formato X.NEF para los cuales X.JPG no existe en el directorio. (X aquí puede ser cualquier cadena). No sé cómo hacer esto más que a mano.

Una situación más general es cuando desea encontrar todos los archivos en un directorio A que también existen en el directorio B. (El primer problema se puede convertir en el segundo usando mmv).

Respuesta1

Puede utilizar las ${var%ext}funciones de sustitución de parámetros del shell para eliminar la extensión original por archivo: para ilustrar

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

Entonces

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

resultados en

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

Explicación:

El primer comando simplemente crea 6 .NEFarchivos numerados file1.NEFy file6.NEFlos .JPGarchivos correspondientes para 3 de ellos, es decir, solo algunos archivos vacíos para probar el segundo comando.

información relacionada