copie os arquivos de uma pasta e cole-os em outro local com o mesmo nome de pasta

2

Por favor, preciso de ajuda com o backup ... Estou tentando fazer algo e não tenho idéia de como começar. Eu quero fazer um script no Ubuntu que pesquisa através de todas as pastas da minha partição W7, e onde quer que haja arquivos .cdr, ele seleciona e copia todos os arquivos daquela pasta (.jpg, .png, .pdf, etc. .) mas não outras pastas nessa pasta. Em seguida, ele colaria esses arquivos em minha unidade externa na pasta nomeada exatamente como aquela de onde os arquivos foram copiados.

Eu sei que é complicado e meu inglês não é muito bom.

Espero que você possa entender com o que estou lutando e me ajudar.

Qualquer ajuda ou mesmo conselho é muito apreciado. OBRIGADO!

    
por user167302 29.07.2013 / 19:20

1 resposta

2

Script

Não é muito ruim com alguns find , rsync e bash script magic. Coloque isso em um arquivo ( backup.sh ):

#!/bin/bash

source_dir=${1:-<source directory>}
dest_dir=${2:-<destination directory>}
tmp_file=/tmp/$USER/bkp_files

find "$source_dir" -name '*.cdr' -print | while read file; do
    find "$(dirname $file)" -maxdepth 1 -xtype f -print
    done > "$tmp_file"

rsync --files-from "$tmp_file" / "$dest_dir"

Então você tem que torná-lo executável com

$ chmod +x backup.sh

E você pode executar o script com

$ ./backup.sh

Passo a passo

Deixe-me explicar

find "$source_dir" -name '*.cdr' -print

localiza todos os arquivos .cdr em $source_dir Isso é então canalizado em um loop while:

| while read file; do ...  done > "$tmp_file"

Isso pega todos os arquivos do comando find anterior, executa alguns comandos e grava o resultado em $tmp_file . Nota: Isso só funciona se o nome do arquivo não contiver novas linhas, que devem ser fornecidas com uma partição do Windows. A segunda descoberta é

find "$(dirname $file)" -maxdepth 1 -xtype f -print

Aqui $(dirname $file) nos fornece o nome do diretório do arquivo .cdr. É o ponto de partida para o nosso próximo comando de localização. Lá nós não descemos em subdiretórios com -maxdepth 1 e estamos interessados apenas em arquivos -xtype f

Por fim, usamos o rsync para copiar os arquivos que salvamos em $tmp_file :

rsync --files-from "$tmp_file" / "$dest_dir"

rsync manterá a estrutura da árvore de diretórios como está, o que você quer, certo?

Para mais informações, consulte as páginas do manual:

$ man find
$ man rsync
    
por ahilsend 29.07.2013 / 20:28