Рекурсивна / глибока копія каталога командного рядка в Linux?


13

Який хороший загальний спосіб зробити рекурсивну / глибоку копію каталогу в Linux, яка працює в більшості випадків? Я використовував як прості речі, cp -Rтак і досить складні cpioзаклики. Чи є якісь значні сильні чи слабкі сторони, які змушують вас віддавати перевагу одній над іншою? Яким ви користуєтесь найчастіше?

Відповіді:


29
NAME
cp - copy files and directories

-a, --archive
   same as -dpR

-d     same as --no-dereference --preserve=links
-p     same as --preserve=mode,ownership,timestamps
-R, -r, --recursive
    copy directories recursively

Отже, відповідаючи на ваше запитання:

cp -a /foo /bar

Копіюйте все рекурсивно з каталогу / foo в каталог / бар, зберігаючи символьні посилання та режим "файл" / "каталог", "власність" та "часові позначки".


Це, звичайно, дуже пряме та елегантне рішення. Ви коли-небудь виявляли недоліки такого підходу? Розподілені файлові системи? Надзвичайно великі копії? Чи знайшли ви інші рішення, такі як cpio, tar або rsync, які ефективніші в деяких випадках?
Грег Маттес

1
Якщо немає фізичної помилки, у мене ніколи не виникало локального відмови від «пам’яті» з пам’яті (я робив лише передачі розміром з туберкульозом) у будь-яке місце, встановлене локально (незалежно від встановлення NFS або Samba). Отримайте замовлення на "ВИКОРИСТАННЯ" на сторінці "rsync man", щоб побачити приклади, які ви знайдете повчальними. Коханий мій: $ Rsync --partial --progress --rsh = SSH --archive --verbose --compress Foo / користувач @ hosname: ~ / бар (Rsync -avzP)
Gareth

Як я зазначав вище, -a не є суто портативним.
Метью Флашен

Добре я знаю, що busybox, GNU & BSD cp все в порядку. Окрім застарілих коробок Unix, я ніколи не бачив, на чому це не буде працювати? Я інакше не бачу сенсу в іншому випадку, хоча я цілком розумію настрої Зоредаче про те, що "Завжди здається, що робота виконана правильно, тому мені ніколи не важко було знайти заміну".
Гарет

@gyaresu Будь ласка, подумайте, як розділити свій другий коментар на іншу відповідь, щоб ми могли проголосувати за нього.
Грег Маттес

6

Найчастіше я використовую таку команду, як "cd $ srcdir; tar -c. | Tar -C $ destdir -x" . Але я також використовую rsync -a $ src $ dst.

Найбільша сила рішення дьогтю полягає в тому, що це те, що мені довелося використовувати в системі багато років тому, у якій не було cpio, rsync або cp, які копіювали б рекурсивно. Дьоготь майже всюди. Він застряг на моїй голові, тому що я його багато використовував, мабуть, є більш елегантні способи. Це завжди здається, що робота виконана правильно, тому я ніколи не намагався знайти собі заміну.


Мені дуже подобається аргумент "всюдисутність дьогтю". Я досвідчений у vi з подібних причин, хоча я віддаю перевагу іншим редакторським середовищам.
Грег Маттес

-R вже давно є частиною стандарту ( opengroup.org/onlinepubs/009695399/utilities/cp.html ), хоча не -.
Меттью Флашен

@Matthew Flaschen: Ваш коментар призначений для відповіді @ gyaresu?
Грег Маттес

Це також має відношення до цього, оскільки Зоредач сказав, що він зіткнувся із системою, яка "не мала [...] cp, який би копіював рекурсивно". В основному, -R -> портативний, -a -> не портативний.
Меттью Флашен

1
Це було ще в ~ 95, і система працювала з версією Unix наприкінці 80-х. Я не думаю, що -R був варіантом для cp, але я не впевнений. Я дізнався, що ласощі читає Usenet.
Зоредаче

6

Погляньте на rsync ... Мені це подобається, тому що ви копіюєте менше даних при постійному оновленні двох каталогів ... він також може працювати віддалено. У найпростішому вигляді rsync -a / src / dest


Це дійсно вдалий момент. По суті, rsync має можливість обчислювати "каталог різниць" і передавати лише те, що потрібно для синхронізації каталогів. Таким чином, ви можете неодноразово викликати щось на зразок rsync -a src / dest, щоб "постійно копіювати" каталоги рекурсивно (трейлінг / on src необхідний для правильної синхронізації), тоді як cp -a src / dest не працює так. Команда cp зробить новий src-каталог у dest після першого cp. Вам знадобиться щось на зразок cp -au src / * dest для наступних копій.
Грег Маттес

Інша причина, яку мені подобається rsync, це те, що ви можете передати її прапором -P, який показує панель прогресу. Це дає вам деяке уявлення про те, як довго щось займе
Рорі

0

rsyncє чудовим інструментом. Це швейцарський армійський ніж для передачі даних. Це такий простий і потужний інструмент. Як тільки ви почнете його використовувати, ви підключитесь.

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