Encuentra nombres de files faltantes entre 2 directorys en Linux

Estoy tratando de comparar 2 directorys (A / B) en Linux y ELIMINAR cualquier file de B que NO exista en A.

Por ejemplo, si el file '1.jpg' existe en el Directorio B pero no existe en el Directorio A, entonces debe borrarse de B.

He intentado usar diff pero todos los files son esencialmente diferentes, así que no parece funcionar. (Son miniaturas de diferentes tamaños pero tienen la misma identificación). Por lo tanto, esto tiene que hacerse solo por nombre de file e ignorar el contenido real del file.

¿Puede alguien arrojar algo de luz sobre cómo hacer esto con un mínimo esfuerzo?

rsync puede hacer lo que quiera de forma rápida y fácil:

 rsync --dry-run --verbose --recursive --existing --ignore-existing --delete-after A/ B/ 

De la ayuda:

  --existing skip creating new files on receiver --ignore-existing skip updating files that already exist on receiver --delete delete extraneous files from destination dirs 

Elimine la opción de dry-run después de que esté satisfecho con los resultados propuestos, para ejecutar realmente las eliminaciones.


La página man tiene una descripción más explícita de las opciones e incluso menciona su caso de uso:

  --existing, --ignore-non-existing This tells rsync to skip creating files (including directories) that do not exist yet on the destination. If this option is combined with the --ignore-existing option, no files will be updated (which can be useful if all you want to do is to delete extraneous files). --ignore-existing This tells rsync to skip updating files that already exist on the destination (this does not ignore existing directores, or nothing would get done). See also --existing. 

Para directorys de un nivel

diff -u <(ls A) <(ls B) | sed -n '4,$s/^+//p' | xargs -I{} ls -l B/{}

ls -l debe cambiarse a rm -v , después de la testing, si está haciendo lo que desea.

rsync mejor, seguro. Pero solo otra variante.