Використання “mv” або “ditto” для об'єднання папок у OS X


5

Використовуваний для Windows спосіб роботи я тільки що дізнався OS X не має функції злиття - переміщення означає заміну папки. Хоча це має сенс, я пропускаю злиття!


У мене є два каталоги Wordpress, 1 містить джерело за умовчанням і 2 містить відпрацьовану версію з користувальницькою темою плагінів тощо.

Я хочу побачити різницю між цими двома, так що я ставлю це на SVN. Папка 1 вже вгору, тепер теоретично я повинен просто об'єднати вміст 2 з 1, замінивши все вмістом 2, але залишаючи приховані файли SVN недоторканими.

На жаль, OS X, при переміщенні, замінює папку так, що мій SVN-клієнт сходить з розуму і більше не розуміє структуру папок.

Отже, я вважаю, що мої варіанти mv і ditto, але який ви б використовували в моїй ситуації і як?

sudo mv wordpress /Documents/svn/wwwholiday/trunk/wordpress

я хочу mv перезаписати все знайдене, але залишити все, що вже є в папці 1 і не має дублікатів у папці 2.

Відповіді:


11

Найпростіший спосіб об'єднати папки одним способом, наприклад,

Об'єднайте все з папки 1 → папка 2

було б використовувати rsync.

rsync -avh folder1/* folder2/

Це буде:

  • перемістити всі файли, які існують тільки в папці 1 та її підкаталогах до папки 2
  • ні перезаписати будь-що в папці 2, якщо вона вже є
  • перезаписати змінені файли, хіба що ви додаєте --ignore-existing опції
  • не видаляти нічого з папки 2, хіба що ви додаєте --delete опції

Ви можете пристосувати це до своєї ситуації (де folder1 і folder2 навпаки, напевно).

Можна спробувати переглянути, що робить команда, зателефонувавши:

rsync -avh --dry-run folder1/ folder2/

The dry-run Перемикач показує, що він робить.


Не забувайте, що зворотні риски мають особливе значення folder2/ як пункт призначення не такий, як folder2. Перевірте сторінку rsync для використання та інших опцій.

Також рекомендується -P (згідно з --help, same as --partial --progress ), який додає show progress during transfer і keep partially transferred files (що є корисним для спроб, якщо сталася помилка).


Але мені потрібна команда перезапису файлів. Папка 2 містить оновлені файли php. Які повинні бути записані над вмістом папки 1. Просто хочу зберегти папку 1 svn файлів.

Вибачте, звичайно, файли, які були змінені, будуть замінені цією командою. Тільки файли, які не були змінені, пропускаються повністю. До тих пір, поки папка-джерело не містить файлів SVN, ви налаштовані.
slhck

1
@ killermist OP спеціально хотів зберегти SVN файли, як вони є, тому я включив шаблон навмисно , оскільки без опції dotglob це просто пропускає каталоги SVN. Звичайно, ви можете виключити їх з rsync іншими засобами, але ... це заради простоти.
slhck

0

Ви можете зробити це як @slhck говорить, або ви також можете просто використовувати cp.

$sudo cp -R wordpress/ /Documents/svn/wwwholiday/trunk/wordpress

1
Це створює копію wordpress всередині /Documents/svn/wwwholiday/trunk/wordpress. Ти мав на увазі wordpress/?
Daniel Beck

Не фіксований. Якщо вихідний файл закінчується в /, вміст каталогу копіюється, а не сам каталог.
Daniel Beck

Хіба це не те, що хоче ОП?
에이바

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