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

Можно найти много примеров с веб-сайта QT:

http://doc.qt.io/qt-4.8/all-examples.html

примеры QML: http://doc.qt.io/qt-4.8/qdeclarativeexamples.html

2
задан 15.04.2020, 15:52

1 ответ

Скрипт

Не так уж и страшен с некоторыми find, rsync и магией скриптов bash. Поместите это в файл (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:

| while read file; do ...  done > "$tmp_file"
[ 1126] Это берет каждый файл из предыдущей команды find, выполняет некоторые команды и записывает результат в $tmp_file. Примечание. Это работает только в том случае, если имя файла не содержит символов новой строки, которые следует указывать в разделе Windows. Вторая находка

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

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

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

rsync --files-from "$tmp_file" / "$dest_dir"
[1129 ] rsync сохранит древовидную структуру каталогов в том виде, в каком вы хотите, верно?

Для получения дополнительной информации см. Справочные страницы:

$ man find
$ man rsync
2
ответ дан 15.04.2020, 15:53

Теги

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