
Guión:
- 2 carpetas principales, que pueden tener subcarpetas con los mismos nombres (no sé qué nombres pueden estar duplicados, eso es lo que estoy tratando de encontrar)
- las subcarpetas tienen MUCHOS otros archivos y subcarpetas, por lo que las herramientas con recursividad automática no son realmente una opción
- Sólo me importan los nombres de subcarpetas duplicadas en el primer nivel de las dos carpetas principales.
- El contenido de las subcarpetas no importa.
- El contenido de los archivos no importa.
Intenté usar meld
la GUI, pero eso lleva un tiempo infinito para terminar estas estructuras.
Intenté usarlo diff --brief --report-identical-files folder1 folder2
, pero eso básicamente informa todo y ni siquiera incluye las carpetas, así que ni siquiera puedo | grep identical
.
¿Estoy usando herramientas incorrectas? ¿O hay algún truco que no entendí diff --help
? ¿O estoy haciendo algo mal?
Gracias
Respuesta1
Yo usaría un simple find
:
find "/path/to/main1" "/path/to/main2" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | sort | uniq -d
O hacerlo terminado en cero para evitar problemas con los caracteres de nueva línea:
find "/path/to/main1" "/path/to/main2" -mindepth 1 -maxdepth 1 -type d -printf '%f\0' | sort -z | uniq -zd | xargs -0
Respuesta2
Usando zsh
, dado
% tree dir1 dir2
dir1
├── bar
└── foo
└── baz
dir2
├── bar
│ └── baz
└── baz
6 directories, 0 files
entonces
% a=( dir1/*(/ND:t) ) ; b=( dir2/*(/ND:t) )
crea matrices dettodos los (nombres base) de los directorios /
en los dos directorios de nivel superior dir1
y dir2
(conDotglob ynorteopciones ullglob habilitadas).
Luego podemos usar una expansión del formulario ${name:*arrayname}
para retener solo los elementos que están presentes en ambas matrices:
% print -rC1 ${a:*b}
bar