copie os arquivos pela árvore, mas copie apenas os arquivos e não os diretórios no destino

2

exemplo, eu tenho 100 pastas com arquivos JPG e MOV neles Eu quero copiar todo o jpg em uma pasta e todos os arquivos mov em outro

exemplo

  • folder1 tem one.jpg e two.jpg e one.mov

  • folder2 tem two2.jpg e two2.mov

  • folder3 tem xxx.jpg e yyy.mov

queria resultado

  • pasta jpgfiles contendo one.jpg two.jpg two2.jpg xxx.jpg

  • pasta movfiles contendo one.mov two2.mov yyy.mov

por phil smart 14.04.2015 / 17:04

1 resposta

3

Você pode usar o find para isso. Você usa a pasta acima da pasta1, pasta 2 etc e executa esses comandos lá.

find /folder/ -type f -name "*.jpg" -exec cp {} "jpgfiles/" +
find /folder/ -type f -name "*.mov" -exec cp {} "movfiles/" +

/folder/ é a pasta pai aqui. você precisa modificá-lo para sua pasta pai.

EDIT: Obrigado ao @godlygeek por apontar isso. Se você gostaria de copiar apenas arquivos exclusivos, você pode usar o abaixo

find /folder/ -type f -name "*.jpg" -exec bash -c 'test ! -f jpgfiles/${0##*/} && { cp $0 jpgfiles/${0##*/}; }' {} +
find /folder/ -type f -name "*.mov" -exec bash -c 'test ! -f movfiles/${0##*/} && { cp $0 movfiles/${0##*/}; }' {} +

Para copiar os arquivos conflitantes com um sufixo de arquivo exclusivo:

find /folder/ -type f -name "*.jpg" -exec bash -c 'test -f jpgfiles/${0##*/} && { cp $0 jpgfiles/${0##*/}.$RANDOM; }' {} +
find /folder/ -type f -name "*.mov" -exec bash -c 'test -f movfiles/${0##*/} && { cp $0 movfiles/${0##*/}.$RANDOM; }' {} +
    
por 14.04.2015 / 17:08

Tags