¿Cómo mover todos los subdirectorios al directorio actual?

¿Cómo mover todos los subdirectorios al directorio actual?

Soy nuevo en la programación de scripts de shell. Supongamos que tenemos una jerarquía de archivos como esta:

/A/B/C/D
/A/B/E/F/G
/A/H/I
/A/H/J/K

Tenga en cuenta que aquí no sólo tenemos /A/B/.., sino también /A/H/.... Todas las cartas son directorios. Nos gustaría transformar la jerarquía en:

/A/B/C
/A/B/D
/A/B/E
/A/B/F
/A/B/G
/A/H/I
/A/H/J
/A/H/K

Es decir, mover todos los directorios a una profundidad mayor que dos (el directorio A tiene profundidad cero), a la profundidad dos. Puedo usar JAVA y C para implementarlo, pero son un poco lentos. ¿Alguien sabe cómo utilizar un script de shell para implementarlo?

El pseudocódigo es el siguiente:

for each directory D in current directory A // A may have more than one subdirectories
    for each directory d in D
        for each object in d
            if object is a directory
                move object and all descendant subdirectories of object to /A/D;
            end if
        end for
    end for
end for

Respuesta1

for dir in /A/*; do
    find "$dir" -mindepth 2 -depth -type d -exec mv -t "$dir" -- {} +
done

Esto indica findbuscar todos los directorios ( -type d) al menos 2 niveles por debajo ( -mindepth 2) $diren profundidad primero ( -depth). Para cada objeto que encuentra, ejecuta mv -t "$dir" -- <SRC>. Como siempre, mvno le permite fusionar un directorio de origen con un directorio de destino existente (pero hay formas de evitarlo).

información relacionada