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


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.