Як можна скопіювати (великий) каталог в інший, змінивши лише ті файли, які відрізняються?


14

У мене є каталог a і каталог b. Вони великі. b майже ідентичний a. "майже" означає, що 4-5 файлів відрізняються, і я не знаю, які вони. Я хочу скопіювати b на a, але тільки у файлах, які відрізняються. я в баші.

(ні, я не можу просто видалити a і замінити його на b, оскільки 1) a є контрольованою версією 2) повна копія (або mv) зайняла б занадто багато. Я хочу скопіювати лише ті файли, які відрізняються).


Є rsyncваріант?
Боббі

Так, але про rsync я мало знаю.
janesconference

Відповіді:


17

Ви можете використовувати rsyncдля цього команду, яку я використовуюrsync -tr "folder to copy from" "folder to copy to"

напр rsync -tr /home/me/stuff/* /home/me/otherstuff/


1
ПОВЕРНУЙТЕ цю команду. Це видалить усі файли, які звичайно не відрізняються. Я пробіг його і ВІДМОВИТИ майже все !!
Арвінд К.

@Arvind Я не знаю, яку команду ви використовували, що призвела до втрати ваших даних, але це не rsync -tr. Прочитайте сторінку чоловіка.
Tog

18

Це також можна зробити зі старим добрим cp:

Дякуємо srcspider, що нагадав мені використовувати -T!

cp -ruT old-dir new-dir


+1 Я так звикаю до синхронізації між машинами, що забуваю про елегантні способи.
Тог

не працює для мене :(
janesconference

Це насправді добре gnu cp. ;-)
Кіт

1
В OS X опція -u не існує. Я просто використав cp -r old-dir-new-dir, оскільки мені не довелося порівнювати дати.
Жан-Франсуа Бошамп

Не працює. Я не впевнений, чи це якась умовна назва, але cp -ru папка-папка-B просто копіює папку-A всередині папки-B не копіює вміст A всередині B і перезаписує, що було б бажаним ефектом.
srcspider

1

Ще один хороший варіант - Unison ( http://www.cis.upenn.edu/~bcpierce/unison/ ), особливо якщо насправді немає "джерела" та "місця призначення". Кожен каталог - це корінь, а Unison синхронізує їх і зберігає метадані для майбутніх синхронізацій. Він пропонує як командний рядок, так і графічний інтерфейс, який також легко можна запланувати через cron.

Я використовую його для створення резервної копії свого Dropbox на локальному пристрої NAS, який не може запустити клієнт Dropbox.


1

МОЖЕ бути зроблено з хорошим ol 'cp, хоча з дещо іншим форматом, ніж зазначено вище. Ось як я це зробив:

cp -ru --target-directory="destination_path" source_path/*

1

Ви можете відрізняти два каталоги.

diff -r dir1 dir2

він покаже вам список файлів, які є diffnetnet

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