скопировать файлы из одной папки и вставить их в другое место под тем же именем папки

Пожалуйста, мне нужна помощь с резервным копированием ... Я пытаюсь что-то сделать, и у меня НЕТ ИДЕИ, как начать. Я хочу создать скрипт в Ubuntu, который будет выполнять поиск во всех папках моего раздела W7, и там, где есть файлы .cdr, он будет (выбирать и) копировать все файлы из этой папки (.jpg, .png, .pdf, .. .) но не другие папки в этой папке. Затем он вставит эти файлы на мой внешний диск в папку, названную точно так же, как и те, с которых эти файлы были скопированы.

Я ЗНАЮ, что это сложно, и мой английский не очень хорош.

Надеюсь, вы понимаете, с чем я борюсь, и помогаете мне.

Любая помощь или даже совет очень ценится. СПАСИБО!

2
задан 14 October 2013 в 08:39

1 ответ

Сценарий

Не слишком ужасный с некоторыми find, rsync и волшебство сценария удара. Поместите это в файл (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"

Затем необходимо сделать это исполняемым файлом с

$ chmod +x backup.sh

И можно запустить скрипт с

$ ./backup.sh

Шаг за шагом

Позвольте мне объяснить

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

находит все .cdr файлы в $source_dir Это затем передается по каналу в некоторое время цикл:

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

Это берет каждый файл от предыдущего find управляйте, выполняет некоторые команды и пишет результат в $tmp_file.Примечание: Это только работает, если имя файла не содержит новые строки, которые должны быть даны с разделом окон. Вторая находка

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

Здесь $(dirname $file) дает нам имя каталога .cdr файла. Это - стартовая точка для нашей следующей команды находки. Там мы не убываем в subdirs с -maxdepth 1 и только интересуются файлами -xtype f

Наконец мы используем rsync для копирования файлов, в которых мы сохранили $tmp_file:

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

rsync сохранит структуру дерева каталогов, как, который является тем, что Вы хотите, правильно?

Поскольку больше infos видит страницы справочника:

$ man find
$ man rsync
2
ответ дан 14 October 2013 в 08:39

Другие вопросы по тегам:

Похожие вопросы: