¿Cómo diferenciar los nombres de archivo en dos directorios (sin escribir en archivos intermedios)?


31

Estoy tratando de hacer algo en la línea de:

diff `ls -1a ./dir1` `ls -1a ./dir2`

Pero eso no funciona por razones obvias. ¿Hay una mejor manera de lograr esto (en 1 línea) que esta?

ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2

Gracias

Respuestas:



10
diff -rq dir1 dir2

usando la opción -r, recorra árboles de directorios completos, verificando recursivamente las diferencias entre subdirectorios y archivos que ocurren en puntos comparables en cada árbol. El truco es usar la opción -q para suprimir las comparaciones línea por línea


3
@festo: No te faltará el punto de esta pregunta, en realidad no quiero diferenciar el contenido de los archivos, quiero diferenciar la salida de los lscomandos
bguiz

+1, en realidad, obtuve el mismo resultado con la advertencia, diff -rq informó un archivo vinculado como 'No existe tal archivo o directorio'. Entonces, más uno para un uso correcto y francamente más simple. (incluso si la respuesta de IVA es una mejor 'oportunidad de aprendizaje' para la sustitución de procesos (> _ <)
xtian

1
Esto es mucho más lento que diferenciar los nombres de los archivos: la totalidad de cada archivo debe leerse y compararse.
Zaz

@ Josh, por supuesto, porque lo hace de forma recursiva ...
Braiam

1
@Braiam: Incluso si difiere recursivamente los nombres de los archivos (usando rsyncla --dry-runopción, por ejemplo), aún sería mucho más rápido que diff -r.
Zaz
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.