Como mover arquivos para um diretório?

3

Eu herdei uma estrutura de pastas em um projeto e gostaria de simplificá-lo um pouco. Eu tenho uma raiz cheia de pastas (1 º nível) e cada uma dessas pastas tem um número de pastas (nível 2) e cada uma dessas pastas tem alguns arquivos dentro. Parece algo assim:

root
|-- dir1
|    |-- dir1.1
|    |      +- file1.txt
|    |-- dir1.2
|    |     +- file2.txt
|    +-- dir1.N
|          +- fileN.txt
|-- dir2
|    |-- dir2.1
|          +- file3.txt
|-- dir3
|    |-- dir3.1
|          +- file4.txt

etc.

Gostaria de remover todas as pastas x.1, simplificar a estrutura e mover todos os arquivos dessas pastas um nível abaixo:

root
|-- dir1
|     +- file1.txt
|     +- file2.txt
|     +- fileN.txt
|-- dir2
|     +- file3.txt
|-- dir3
|     +- file4.txt

Como eu realizaria algo assim através do bash / zsh?

    
por user1064903 20.12.2012 / 03:50

2 respostas

1

Não sei se isso funcionará no zsh, mas espero que seja no bash (embora não tenha testado totalmente):

for f in */*/*
do
        mv "$f" "$(dirname "$(dirname "$f")")"
done

for f in */*
do
        if [ –d "$f" ]
        then
                rmdir "$f"
        fi
done

P.S. No Unix (ao contrário da botânica, ou seja, no mundo real), as árvores têm suas raízes no topo. Portanto, essa operação seria considerada mover arquivos para cima na estrutura de diretórios.

    
por 20.12.2012 / 04:31
0
for d in */*; do
    mv "$d"/* "$d"/..
    rm -r "$d"
done

Isso não funciona se o segundo nível contiver diretórios ou arquivos vazios.

    
por 20.12.2012 / 06:53

Tags