Encuentra archivos en un directorio no en otro


12

¿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:


20

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

55
Esto es bueno. Una queja: diff se está ejecutando en cada uno de los archivos que están en ambos. ¿Existe una opción oscura para simplemente ejecutar contra nombres de archivo (puede que me lo haya perdido)? De lo contrario, sugierodiff dir1 dir2 | grep "Only"
Willi Ballenthin

wow esto solo me ahorra muchos minutos de bash scripting gracias
user5359531


4

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


3

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.


1

for i in $(ls -1 directory1); do if (test -f directory2/$i) then echo $i; fi; done


0

Esto funciona..

ls -a1 /dir1 | sort > /tmp/1
ls -a1 /dir2 | sort > /tmp/2
diff /tmp/1 /tmp/2

0

no probado:

find /dir/A -printf "%P" | while read f; do
  if [ ! -e "/dir/B/$f" ]; then
    echo $f
  fi
done

0

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.