¿Cómo encontrar las mismas subcarpetas en dos carpetas solo en el primer nivel?

¿Cómo encontrar las mismas subcarpetas en dos carpetas solo en el primer nivel?

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 meldla 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 dir1y 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

información relacionada