Como posso recursivamente copiar arquivos por extensão de arquivo, preservando a estrutura de diretórios?

68

Na linha de comando do Linux, gostaria de copiar um conjunto (muito grande) de .txt arquivos de um diretório (e seus subdiretórios) para outro.

Eu preciso que a estrutura de diretórios permaneça intacta e preciso ignorar os arquivos, exceto os que terminam em .txt .

    
por unclaimedbaggage 21.06.2011 / 06:41

7 respostas

91

Você pode usar localizar e cpio para fazer isso

cd /top/level/to/copy
find . -name '*.txt' | cpio -pdm /path/to/destdir

(-updm for overwrite destination content.)
    
por 21.06.2011 / 09:29
7
cd /source/path
find -type f -name \*.txt -exec install -D {} /dest/path/{} \;
    
por 21.06.2011 / 10:13
2

Outra abordagem

find . -name '*.txt' -exec rsync -R {} path/to/dext \;

    
por 18.01.2016 / 03:31
1

A maneira mais fácil que funcionou para mim:

cp --parents -R jobs/**/*.xml ./backup/

uma captura é que você tem que navegar para o diretório "desejado" antes, então o "caminho pai" está correto.

Verifique também se você ativou globs recursivos no bash:

shopt -s globstar
    
por 11.09.2014 / 23:21
1

Que tal você primeiro copiá-lo com

cp -r /old/folder /new/folder

depois vá para a nova pasta e execute

find . -type f ! -iname "*.txt" -delete

ou apenas

cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete

Edit: ok você quer um comando que filtra (eu não testei isso porque meu sistema não tem o comando cpio !). Aqui é onde eu o encontrei: link

find . -name "*.txt" -print0 |
     cpio -pmd0 /dest-dir

Por favor teste isso primeiro, porque ainda não experimentei. Se alguém verificasse, isso seria ótimo.

    
por 21.06.2011 / 07:03
0

Navegue até o diretório:

find . -regex '<regexp_to_get_directories_and_files_you_want>' | xargs -i cp -r --parents {} path/to/destination

É um pouco mais direto e poderoso, se você gerencia expressões regulares.

    
por 12.10.2018 / 13:25
-1

Navegue até o diretório:

cp '*.css' /path/to/destination

Você terá que navegar para cada pasta no diretório, mas isso é melhor do que a maioria das opções que vi até agora.

    
por 20.10.2016 / 22:29

Tags