Одна дорожная синхронизация каталог, но отпуск удалил файлы, удаленные на месте назначения

Вероятно, владение или полномочия Вашего корневого каталога изменились.

Для фиксации его работайте как корень

chown -R USER:USER ~USER
chmod u+rwx ~USER

где необходимо заменить USER с Вашим именем пользователя.

6
16.07.2017, 05:21
3 ответа
[

]Если вы не собираетесь использовать удаленную файловую систему в качестве источника данных о том, что было передано, то вам необходимо внешнее отслеживание файлов, которые были успешно переданы ранее, а затем исключить их из будущих передач. [

] [

][][]rsync[][] может включать и исключать файлы на основе []шаблонов [] в файл, чтобы вы могли включить в передачу определенный список файлов. Тогда исключите этот список из будущих передач.[

] [
#!/usr/bin/env bash

set -e

track_dir=~/.track_xfer
inc_file="$track_dir/include_files"
exc_file="$track_dir/exclude_files"
xfer_dir=~/testrsync
xfer_dest=~/testrsync_dest

mkdir -p "$track_dir"
touch $exc_file
cd "$xfer_dir"

# find files and create rsync filter list
find . -type f -print0 | perl -e '
  $/="\0"; 
  while (<>){ 
   chomp; 
   $_ =~ s!^\.!!;    # remove leading .
   $f = quotemeta;   # quote special chars
   $f =~ s!\\/!/!g;  # fix quoted paths `/`
   print $f."\n"; 
  }' > "$inc_file"

# Run the rsync
rsync -va --delete --exclude-from "$exc_file" --include-from "$inc_file" "$xfer_dir/" "$xfer_dest"

# Add the included/transferred files to the exclusion list
cat "$inc_file" "$exc_file" > "$exc_file".tmp
sort "$exc_file".tmp | uniq > "$exc_file"
] [

]Вам может понадобиться более специфическое цитирование []rsync[], но функция Perl [][]quotemeta[][] и замены были первым простым решением, которое пришло в голову. [

] [

]Основной проблемой будет работа с любыми специальными символами в именах файлов. Если вы хотите иметь дело с новыми строками или вкладками и другими странными вещами в именах, то вам придется немного поработать с []perl[] (или чем-то еще), который разбирает и генерирует список шаблонов включений. Если вы можете ограничить имена ваших передаваемых файлов простым набором символов, то вам не нужно так сильно беспокоиться об этом шаге. []perl[] - это половинчатое решение, которое должно помочь вам обойти наиболее распространенные символы регекса. [

] [

] Причина использования списка включений вместо того, чтобы позволить []rsync[] самому вытаскивать весь каталог так, чтобы у вас был определённый/полный список файлов для последующего списка исключений. Вы, вероятно, могли бы получить тот же результат, проанализировав вывод []rsync[] или []--log-файл=FILE[] для файлов, которые были переданы, но выглядели немного сложнее.[

].
1
27.01.2020, 20:31
[

] Пожалуйста, прочтите man-страницу, так как она должна ответить на все ваши вопросы. Команда []man rsync[] должна отобразить man-страницу.[

] [

]rsync проверит, что файлы не были изменены. Это очень эффективно и никогда существенно не замедляло время rsync для моих переводов. Вы можете оценить, сколько времени это займет по времени выполнения rsync сразу после последнего запуска. [

] [

] rsync является односторонней синхронизацией и не изменяет исходный код. Вы можете безопасно использовать пользовательский интерфейс, который может только читать исходный файл, но не имеет прав на запись. Однако в этом нет необходимости. [

] [

]rsync восстанавливает частично завершенные передачи при повторном запуске. [

] [

]rsync удаляет файлы только в местах назначения, если вы используете одну из опций удаления. [

] [

]EDIT: чтобы предотвратить повторные передачи файлов, удаленных из целевой директории, необходимо создать список исключений для этих файлов. Это исключит их из передач, даже если они обновлены. В качестве альтернативы можно усечь файлы вместо их удаления и использовать флаг []-обновление[]. Файлы, которые обновляются после усечения, будут скопированы. [

] [

]Вы можете обнаружить, что использование инкрементного tar резервного копирования делает то, что вы хотите лучше. Можно использовать канал вывода одного tar на другой через соединение ssh. При этом будут взяты все файлы, созданные или измененные со времени последнего резервного копирования, но не будут переданы другие файлы. [

]
-1
27.01.2020, 20:31

Rsync сделает именно то, что вы хотите, с помощью rsync -a --delete (добавьте -x , если вам нужны xattrs, например, для selinux).

Rsync никогда не удалит файлы в источнике, но - delete удалит все файлы в месте назначения, которых нет в источнике.

Он обновит частично переданные файлы с помощью механизма дельта-обновления. AFAIR rsync сначала проверит mtime (+ размер файла), и только в случае несоответствия будет выполнено снятие отпечатков пальцев и дельта-обновление.

-1
27.01.2020, 20:31

Теги

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