rsync: удалите некоторые файлы в месте назначения не в источнике, но не удалите других

В то время как другие варианты в порядке, я хотел бы исправить некоторые ошибки в вашем подходе:

UserID = $ (CAT $ UIDScript | Cut -C1 -D ':') :

  • - C Получает символы, вам нужно поля . Используйте Cut -F1 -D: .
  • Бесполезное использование кота: просто делайте: CUT -F1 -D: <«$ UIDScript» .
  • Храните результат в массиве, чтобы вы могли легко перейти на него, а другой массив легко:

     IFS = $ '\ N' # Split на Newline
    set -f # отключить глобальную часть оператора разделения + глобуса
    userId = ($ (cut -f1 -d: <"$ uidscript")))
     
  • То же самое для имена файлов.

Тогда вы можете зацикливаться по индексам любого массива:

for i in "${!userid[@]}"
do 
    find . -user "${userid[i]}" -name "${filename[i]}"; 
done
0
11.03.2015, 18:59
1 ответ

Есть два варианта. Оба используют rsync.

Или: Обновляйте только share1 и share2, удаляя неизвестные файлы в целевой

rsync --dry-run -avP --delete .../src/share1 .../src/share2 .../des/

Или: Обновляйте все в des, удаляя неизвестные файлы в целевой des1

rsync --dry-run -avP --delete --exclude '/des1' .../src/ .../des/

Когда вас устраивает результат, удаляйте --dry-run.

1
28.01.2020, 02:51

Теги

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