Estoy tratando de encontrar los archivos que existen en un directorio pero no en el otro, traté de usar este comando:
diff -q dir1 dir2
El problema con el comando anterior es que encuentra tanto los archivos en dir1
pero no en dir2
como los archivos en dir2
pero no en dir1
,
Estoy tratando de encontrar los archivos en dir1
pero no en dir2
solamente.
Aquí's una pequeña muestra de cómo son mis datos
dir1 dir2 dir3
1.txt 1.txt 1.txt
2.txt 3.txt 3.txt
5.txt 4.txt 5.txt
6.txt 7.txt 8.txt
Otra pregunta que me ronda la cabeza es ¿cómo puedo encontrar los archivos en dir1
pero no en dir2
o dir3
en un solo comando?
diff -r dir1 dir2 | grep dir1 | awk '{print $4}' > difference1.txt
Explicación:
diff -r dir1 dir2
muestra los archivos que están sólo en dir1 y los que están sólo en dir2 y también los cambios de los archivos presentes en ambos directorios si los hay.
diff -r dir1 dir2 | grep dir1
muestra qué ficheros están sólo en dir1
awk
para imprimir sólo el nombre del fichero.
comm -23 <(ls dir1 |sort) <(ls dir2|sort)
Este comando le dará los archivos que están en dir1 y no en dir2.
Sobre el signo <( )
, puedes buscarlo en Google como 'sustitución de procesos'.
El plugin DirDiff de vim es otra herramienta muy útil para comparar directorios.
vim -c "DirDiff dir1 dir2"
No sólo lista qué archivos son diferentes entre los directorios, sino que también permite inspeccionar/modificar con vimdiff los archivos que son diferentes.