Синхронізуйте дві локальні папки в bash


23

У мене в домашньому каталозі є одна велика папка "X" і застаріла копія цього на флешці - Y. Що є аналогом rm Y; cp X Y, але не перезаписуючи вже наявні файли?

Відповіді:


26

Для rsync є набагато більше властивостей, ніж згадується у попередній відповіді. Ви самі повинні їх заглянути:

man rsync

Але для вашої проблеми я б запропонував:

rsync -a --delete X Y

Таким чином, одержувач (Y) видалить будь-який файл, який у нього є, але не в X. Будьте впевнені, ви зробите це правильно. Використовується неправильно, оскільки root може легко вбити вашу систему ... :)


1
Погодьтеся, що вам слід бути дуже обережними з цим. Спробуйте додати --dry-run до команди, щоб побачити, що станеться, не змінюючи насправді ніяких змін. Якщо все піде добре, виконайте таку ж команду без --dry-run
squarecandy

Невелика поправка , що мені було потрібно якийсь час , щоб дістатися до rsync -a --delete X/ Y. Цей маленький косий рядок після X змусив його працювати так, як було призначено для мене, тож він може допомогти і іншим. Пояснено
Shovalt

15

Погляньте на rsync (1) . Він призначений робити майже все саме те, що ви хочете.

rsync -av X Y

Він підтримує віддалене копіювання, через власний протокол або ssh, але також може використовуватися локально.

Залежно від конкретної поведінки, яку ви хочете, ви також можете прийняти --updateваріант. Це дозволить rsync не перезаписувати файли, які вже існують у цілі та новіші, ніж файли в джерелі.

Якщо ви хочете видалити зайві файли (тобто файли, які існують у Y, але не в X), ви можете додати цю --deleteопцію.


Але він не видалить файли, ніж видаляється в X, поки rm Y; cp X Yбуде.

Для того, щоб видалити файли, видалені з X, скористайтеся опцією --delete.
csonuryilmaz

0

Спробуйте скористатися rsnyc, можливо, за допомогою наступної команди:

rsync -avzu /home/x /y

-u = не перезаписуйте файл у пункті призначення, якщо він модифікований


Але він не видалить файли, ніж видаляється в X, поки rm Y; cp X Yбуде.

0

Я думаю, що функціонал, який ви шукаєте в опції -u (оновлення), насправді існує в цьому варіанті:

"--ignore-postoje" - пропустити оновлення файлів, які існують на приймачі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.