У меня есть два каталога в скрипте bash, которые содержат эти две переменные
$SRC
$DEST
Как бы я сделалrsync
- копирование файлов из $SRC/ в $DEST/,
- Проверка соответствия файлов $DEST/* файлам $SRC/ (наилучшее возможное соответствие, хотя и медленное)
- а затем удалить файл $SRC/?
Все, что я нахожу в Google, дает пример выполнения rsync и последующего удаления файла DEST.
Я не понимаю, зачем делать переход rsync
в целевой каталог, а затем удалять его?
поищите в Google и поймете, что я имею в виду.
решение1
Итак, опция Переместить файл — это --remove-source-files
. Вотстраница руководства, и посмотрите обсуждение здесь:
https://unix.stackexchange.com/questions/43957/using-rsync-to-move-not-copy-files-between-directories
Обратите внимание, что rsync всегда проверяет файлы с помощью контрольных сумм, но вам решать, достаточно ли этого для ваших проблем. Примечательно, что контрольная сумма от места назначения рассчитывается при передаче, а не после записи на диск, поэтому она не рассчитывается на основе полученного файла, и вы не получите сбой, если только не возникнет ошибка ОС при его записи. Некоторые обсуждения этого здесь: https://unix.stackexchange.com/questions/30970/does-rsync-verify-files-copied-between-two-local-drives
Если этого недостаточно для ваших нужд, рассмотрите возможность написания скрипта для rsync-синхронизации файлов без удаления источника, повторного запуска rsync с -c
целью выбора/копирования файлов, контрольная сумма которых не совпадает, а затем окончательного удаления исходных файлов с помощью rm
или чего-то подобного.
решение2
Это должно быть простое использование rsync
опции--remove-source-files
rsync --dry-run --stats -av --remove-source-files "$SRC/" "$DEST/"
Удалите --dry-run
(и, возможно, --stats
), когда будете довольны, что команда будет делать то, что, по вашему мнению, она должна делать.