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