Como mover todos os subdiretórios para o diretório atual?

Como mover todos os subdiretórios para o diretório atual?

Sou novo na programação de scripts de shell. Suponha que tenhamos uma hierarquia de arquivos como esta:

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

Observe que aqui não temos apenas /A/B/.., mas também /A/H/.... Todas as cartas são diretórios. Gostaríamos de transformar a hierarquia em:

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

Ou seja, mover todos os diretórios em uma profundidade maior que dois (o diretório A tem profundidade zero), para a profundidade dois. Posso usar JAVA e C para implementá-lo, mas eles são um pouco lentos. Alguém sabe como usar um script de shell para implementá-lo?

O pseudocódigo é o seguinte:

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

Responder1

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

Isso instrui finda pesquisar todos os diretórios ( -type d) pelo menos 2 níveis abaixo ( -mindepth 2) $direm profundidade ( -depth). Para cada objeto que ele encontra, ele é executado mv -t "$dir" -- <SRC>. Como sempre, mvnão permite mesclar um diretório de origem em um diretório de destino existente (mas existem maneiras de contornar isso).

informação relacionada