Копіюйте лише нові файли - чи це можливо? В основному хочуть об'єднати дві папки


14

У мене на пайці 1 на папці "Музика" папка є 100 Гб. У мене на пайці 2 на папці "Музика" є папка, вона становить 116 Гб. Це найновіша версія. Як скопіювати папку "Музика" з Диска 2 на Диск 1 без необхідності переписувати кожен окремий файл?


Яку версію ОС X ви використовуєте?
Нікс

1
Я використовую 10.7.4. Коли я копіюю папку з одного диска на інший, мене запитують, чи хочу я замінити. Немає варіанту злиття.
Даллен

Відповіді:


5

Параметр злиття з’явиться, лише якщо ви копіюєте (а не переміщуєте) папку. Переконайтесь, що ви тримаєте option, перетягуючи нову папку до місця розташування старої папки. Крім того, використання + cдля копіювання нової папки та + vнаклеювання на стару папку повинні дати вам можливість об'єднати файли.


Здається, це все ще записує файли, які не потрібно переписувати. Використовуючи rsyncнатомість
BRogers

Навіть якщо опція для об'єднання є, вона іноді не працює (просто повідомляє про помилку і нічого не роби) - особливо у випадку великих папок, як у вашому випадку. Це ще одна причина, чому ви повинні використовувати rsync.
Анджей Мартина

24

Це класичний випадок використання rsync:

rsync -av /source-path/source-dir /destination-path

rsync буде копіювати лише нові та змінені файли на нове місце.

Важливо зрозуміти, як функціонує кінець косої риски на аргументі джерела. Якщо є косою косою рисою, то вміст / source-path / source-dir буде скопійовано до місця призначення . Якщо немає косої косої риси, тоді джерело dir буде скопійовано до пункту призначення, а його вміст буде іншим рівнем вниз в ієрархії призначення.

Тож, якщо ви хочете скопіювати один шлях на інший, включіть проріз наступного рівня:

rsync -av /sourcepath/sourcedir/ /duplicatpath/sourcedir/

1
Чудовий улов! І якщо ви робите це з декількох дисків (або з будь-якого місця на вашому комп’ютері) і не хочете друкувати каталоги, ви можете просто перетягнути диск (зовнішній usb або часову капсулу) або просто певний каталог і додати його це до команди для вас. Просто перетягніть цільове місце в термінал
BRogers

Людина, дуже дякую за те, що ти запропонувавши останню рису. Я провів міркування, чому rsync -av ./foo/bar / vol1 / foo / bar копіює всі існуючі файли. Криваві косинці лол !!!
посміхається

4

ОНОВЛЕННЯ

Спершу встановіть coreutils. Біжи brew install coreutils. Якщо у вас не brewвстановлено ... поверніться до windows!

Перевірте, чи cp --versionвиводиться версія cp (GNU coreutils) 8. ^^

Тоді у вас буде правильна cpверсія і -uпрапор запрацює.


Перевірте cpкоманду. Використовуйте man cpта читайте параметри. Ви можете зробити щось на кшталт:

cp -r -u ~/source ~/destination

-R, -r , --рекурсивні: каталоги копіюють рекурсивно
-u , --update: копіюють лише тоді, коли файл SOURCE новіший, ніж цільовий файл, або коли відсутній файл призначення
-p такий же, як --preserve = режим, право власності , часові позначки
-v --вербоза: поясніть, що робиться

Отже, якщо ви хочете скопіювати файли з папки завантаження / музики, щоб сказати, що ваша папка " Музика / нова папка", ви зробите щось таке: Це об'єднало б вміст цих двох папок, і якщо два файли з тим самим іменем та контуром існують, це збереже найновіший на основі часової позначки.
cp -ruvp ~/Downloads/music/* ~/Music/new/


Ви впевнені, що параметр -u працює з командою cp в OSX? Я отримую повідомлення "cp: незаконний варіант - u" в Сьєрра. Здається, не всі команди такі ж, як у Linux.
OMA

Спробуйте команду cp --help і подивіться, чи доступна опція. Або перевірте cp --version і переконайтеся, що він актуальний. Я використовую: cp (GNU coreutils) 8.27
drew7721

На жаль, -u не є дійсним прапором для cp на OS X. Це було б дуже зручно!
Запитаний Аронсон

На жаль, ця відповідь невірна.
Вільям Чернюк

використовувати brew install coreutilsдля отримання правильної cpверсії.
drew7721

0

Не впевнений, чому для мене за замовчуванням кнопка злиття левів не відображається. Але я закінчив використовувати ditto. Знайдено тут: https://superuser.com/a/221599/102789


1
БУДЬ ОБЕРЕЖНИЙ! ditto не зберігає новіші файли, він завжди переписує призначення з джерелом. Якщо вихідний файл старіший, він закриє новий файл і замінить старіший файл
FrancescoMM

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