Ir para os diretórios n

4

Eu gostaria de realizar algum processamento em arquivos com 6 diretórios na minha árvore (por exemplo, cópia). Os nomes dos diretórios em cada nível de diretório são inteiramente irregulares (números e letras aleatórios) e, no último nível, existem 20 diretórios diferentes onde estão meus arquivos.

Um exemplo de um caso:

cp /000157/DZW123/AHG345/DFR987/000RE7/0025RTZ/file.xxx  /destination/file.xxx

Mesmo caso com um último nível diferente (entre 19 outros):

cp /000157/DZW123/AHG345/DFR987/000RE7/1298FGT/file.xxx  /destination/file.xxx

Mas completamente diferente para muitos outros casos:

cp /001154/CVS456/SAQ452/FRO921/000VG5/0032RRT/file.xxx  /destination/file.xxx

Por causa dos diferentes casos, um loop não ajudaria. Parece melhor se houvesse uma solução que me permitisse ir diretamente 6 diretórios para baixo na árvore para cada ramo (independente da nomenclatura). Eu tentei o cd + n, mas isso não funciona.

    
por Ruthger Righart 19.09.2014 / 16:57

2 respostas

5

Use find para este trabalho

find / -mindepth 7 -maxdepth 7 -iname '*.txt' -exec echo cp {} /destination \;

Modifique o padrão *.txt de acordo com as suas necessidades e remova echo se gostar do que vê na tela.

    
por 19.09.2014 / 17:25
3

Supondo que você tenha arquivos apenas no nível final de sua estrutura de diretórios, você pode usar o find with xargs para copiar os arquivos conforme abaixo.

find . -type f -mindepth 7 -maxdepth 7 -print0 | xargs -0 cp -t /some/destination/directory

Este funciona bem com espaços nos nomes de sub-diretórios e os espaços nos nomes dos arquivos também.

    
por 19.09.2014 / 18:08

Tags