¿Hay alguna herramienta de Linux / Unix que encuentre todos los archivos en un directorio que no esté presente en otro? Básicamente estoy buscando diff que funciona en la salida de ls.
Los guiones cortos y dulces también son apreciados.
¿Hay alguna herramienta de Linux / Unix que encuentre todos los archivos en un directorio que no esté presente en otro? Básicamente estoy buscando diff que funciona en la salida de ls.
Los guiones cortos y dulces también son apreciados.
Respuestas:
diff ya hace esto:
diff dir1 dir2
Salida de ejemplo:
Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt
Golpetazo:
diff <(cd dir1; ls) <(cd dir2; ls)
Compare solo los nombres de archivo, no el contenido de los archivos.
ls, usar finden su lugar!
Como la gente te dijo aquí, puedes usar DIFF en varias variaciones de uso. ¡O simplemente usa dirdiffen su lugar, lo que está destinado a lo que está intentando! :-)
Pero si quieres mantener algunos directorios sincronizados, entonces realmente deberías echarle un vistazo rsync.
Saludos
Si desea hacer esto también a través de todos los subdirectorios, una buena forma de hacerlo es:
diff --brief -r dir1/ dir2/
Prefiero usar breve, pero puedes dejarlo fuera si quieres.
Dennis Williamson tuvo una buena respuesta , pero necesitaba hacerlo recursivamente. GNU findutils 4.7.0 no ordena su salida, así que esto es lo que usé
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)
Para hacer esto solo de una manera, y producir una lista de archivos, usé esto:
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"
Para que esto funcione correctamente, ni $ dir1 ni $ dir2 deben incluir la barra diagonal final.
diff dir1 dir2 | grep "Only"