Como posso mesclar vários diretórios em um

1

Eu tenho vários arquivos em várias pastas em um diretório que precisa estar em uma pasta. Existe uma linha de comando que pode me ajudar a conseguir isso?

    
por Junior Cortez 08.06.2015 / 23:31

3 respostas

2

Usando find + xargs + mv :

find . -type f -print0 | xargs -0 -I file mv --backup=numbered file .

Isso moverá todos os arquivos no diretório de trabalho atual e seus subdiretórios (recursivamente) para o diretório de trabalho atual, numerando arquivos com o mesmo nome de arquivo numericamente para evitar substituir arquivos com o mesmo nome de arquivo.

Exemplo de resultado em uma pasta tmp com subpastas 1 , 2 e 3 , cada uma contendo um arquivo 1.ext , 2.ext e 3.ext :

ubuntu@ubuntu:~/tmp$ tree
.
├── 1
│   ├── 1.ext
│   ├── 2.ext
│   └── 3.ext
├── 2
│   ├── 1.ext
│   ├── 2.ext
│   └── 3.ext
└── 3
    ├── 1.ext
    ├── 2.ext
    └── 3.ext

3 directories, 9 files
ubuntu@ubuntu:~/tmp$ find . -type f -print0 | xargs -0 -I file mv --backup=numbered file .
ubuntu@ubuntu:~/tmp$ tree
.
├── 1
├── 1.ext
├── 1.ext.~1~
├── 1.ext.~2~
├── 2
├── 2.ext
├── 2.ext.~1~
├── 2.ext.~2~
├── 3
├── 3.ext
├── 3.ext.~1~
└── 3.ext.~2~

3 directories, 9 files
    
por kos 09.06.2015 / 00:23
0

Você pode fazer isso usando find :

find . -type f -exec mv -i -t new_dir {} +

Primeiro crie o diretório ( mkdir new_dir ) onde você deseja mover todos os arquivos, aqui estamos movendo todos os arquivos no diretório ./new_dir .

  • find . -type f encontrará todos os arquivos em todos os diretórios no diretório atual, então você precisa de cd no diretório que contém todos os subdiretórios ou pode usar o caminho absoluto, por exemplo, ~/foo/bar

  • O predicado -exec de find executará o comando mv que moverá todos os arquivos encontrados para o diretório new_dir . Mais uma vez você pode usar o caminho absoluto.

  • mv -i solicitará antes de substituir um arquivo.

Se o novo diretório estiver localizado em outro lugar, use caminhos absolutos:

find ~/path/to/dir -type f -exec mv -i -t ~/path/to/new_dir {} +
    
por heemayl 09.06.2015 / 00:22
0

você pode usar o comando:

find . -type f -execdir mv '{}' /parent-dir \;

man find

 -execdir utility [argument ...] ;
     The -execdir primary is identical to the -exec primary with the exception that 
     utility will be executed from the directory that holds the current
     file.  The filename substituted for the string ''{}'' is not qualified.
    
por Maythux 09.06.2015 / 10:18