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 .NEF
archivos numerados file1.NEF
y file6.NEF
los .JPG
archivos correspondientes para 3 de ellos, es decir, solo algunos archivos vacíos para probar el segundo comando.