¿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 find
en su lugar!
Como la gente te dijo aquí, puedes usar DIFF en varias variaciones de uso. ¡O simplemente usa dirdiff
en 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"