Estou tendo a seguinte estrutura de diretórios:
Main_Dir
|
-----------------------------------
Subdir1 Subdir2 Subdir3
| | |
--------- --------- ---------
| | | | | | | | |
fo1 fo2 f03 fo1 fo2 f03 fo1 fo2 f03
Eu quero copiar todos os subdiretórios ( Subdir1
, Subdir2
, Subdir3
) para uma nova pasta. Mas eu só quero copiar fo1
e fo2
pastas no novo local.
Não tenho certeza de como isso poderia ser feito.
Respostas:
Se a árvore de diretórios for mais do que apenas
..../f03
você pode usar estersync
comando para copiar todos osfo1
&fo2
e excluir todos os outros diretórios com o nomefo*
.Ao lidar com esses tipos de cenários de cópia, eu sempre uso
rsync
e é--dry-run
&--verbose
switches, para que eu possa ver o que vai fazer sem realmente precisar copiar os arquivos.Exemplo
Funcionamento a seco.
Se você quiser ver algumas das
rsync
lógicas internas do que está sendo incluído / excluído, use o--verbose
comutador.Se você precisar excluir outras formas de diretórios, poderá adicionar várias exclusões.
fonte
Use
rsync
:fonte
Você pode tentar algo como isto:
O
find
comando retorna todos os subdiretórios diretos de Main_Dir.basename
retornará o nome do subdiretório encontrado (por exemplo,basename Main_Dir/Subdir1
retornosSubdir1
). Em seguida, você usa a expansão de chaves do shell para evitar a digitaçãofo1
efo2
várias vezes e as copia para onew_dir/$(basename $subdir)
diretório recém-criado .No caso específico de você mencionar onde há apenas diretórios abaixo
Main_Dir
e onde não há espaços ou caracteres estranhos nos nomes, você pode simplificar o acima parafonte
Se sua estrutura de diretórios é exatamente como no seu exemplo (ou seja, todos os
fo
arquivos estão no mesmo nível):fonte