Пожалуйста, мне нужна помощь с резервным копированием ... Я пытаюсь что-то сделать, и у меня НЕТ ИДЕИ, как начать. Я хочу создать скрипт в Ubuntu, который будет выполнять поиск во всех папках моего раздела W7, и там, где есть файлы .cdr, он будет (выбирать и) копировать все файлы из этой папки (.jpg, .png, .pdf, .. .) но не другие папки в этой папке. Затем он вставит эти файлы на мой внешний диск в папку, названную точно так же, как и те, с которых эти файлы были скопированы.
Я ЗНАЮ, что это сложно, и мой английский не очень хорош.
Надеюсь, вы понимаете, с чем я борюсь, и помогаете мне.
Любая помощь или даже совет очень ценится. СПАСИБО!
Не слишком ужасный с некоторыми 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