Como posso copiar arquivos com nomes comuns e colá-los em outra pasta?

5

Gostaria de saber como copiar arquivos com nomes comuns e colá-los em outra pasta.

Por exemplo, eu tenho pastas f1, f2, f3 ... f50. Dentro de cada pasta, existem arquivos chamados #, b #, c # ... z #. # é um tipo de número aleatório e eles são diferentes em f1, f2, f3 ... f50.

Eu gostaria de copiar, por exemplo, a arquivos de todas as pastas de 50 f e colá-los em uma nova pasta.

Você poderia me ajudar a fazer isso?

    
por Arnold 08.09.2016 / 20:33

1 resposta

8

Eu suponho que você quer dizer que você tem uma estrutura como:

├── f1
│   ├── a1
│   ├── a2
│   ├── b1
│   ├── b2
│   ├── c1
│   ├── c2
├── f2
│   ├── a3
│   ├── a4
│   ├── b3
│   ├── b4
│   ├── c3
│   ├── c4

e você quer acabar com um diretório como este:

a-files
├── a1
├── a2
├── a3
└── a4

Assumindo:

  • o diretório de trabalho atual é o diretório pai de todos os diretórios f1 f2 f3

Você poderia fazer:

mkdir a-files
for files in f*/a* ; do cp "$files" a-files ; done

para copiar todos os arquivos que começam com a para um novo diretório a-files de todos os diretórios que começam com f . Você pode repetir para arquivos que começam com b ...

mkdir b-files
for files in f*/b* ; do cp "$files" b-files ; done

Nota: se houver algum nome de arquivo duplicado, cada arquivo gravado no novo diretório sobrescreverá outro com o mesmo nome; assim, no final do loop, o novo diretório terá apenas uma cópia do último arquivo a ser gravado. com esse nome. Você poderia usar o -n flag para cp para evitar sobrescrever e, em seguida, obteria o primeiro arquivo com esse nome em vez do último:

for files in f*/a* ; do cp -n "$files" a-files ; done
    
por Zanna 10.09.2016 / 21:37