Копіюйте файли в Linux, уникайте копії, якщо вони існують за призначенням


32

Мені потрібно скопіювати папку / home / user з одного жорсткого диска на інший. Він має 100 000 файлів і розміром близько 10G.

я використовую

cp -r /origin /destination

іноді я отримую деякі помилки через пошкоджені посилання, дозволи тощо. Тому я виправляю помилку і потрібно запускати копію заново.

Цікаво, як я міг сказати команді "cp", як тільки вона спробує скопіювати знову, а не копіювати файли знову, якщо вони існують у папці призначення.


2
Не нам ср. Використовуйте замість rsync.
Вільям Перселл

Відповіді:


22

cp -R -u -p /source /destination

Прапор -u( або--update ) робить саме це:

На сторінці man для cp:

-u, --оновити

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


6
Буквально лише копіювати файли, які не існують, і не оновлювати існуючі, yes n | cp -i /source/* /destination 2>/dev/null
sventechie

4
-u, --оновіть копію лише тоді, коли файл SOURCE новіший за цільовим файлом або коли відсутній файл призначення -u, - оновити копію лише тоді, коли файл SOURCE новіший, ніж файл призначення, або коли файл відсутній -p те ж, що і --preserve = режим, право власності, часові позначки - зберегти [= ATTR_LIST] зберегти вказані атрибути (за замовчуванням: режим, право власності, часові позначки), по можливості додаткові атрибути: контекст, посилання, xattr, все
Covich


20

rsync -aq /src /dest

Окрім того, що лише копіює новіші файли, вона навіть копіює новіші частини файлів, якщо файл змінився. Він призначений для копіювання через мережеві посилання, де ви хочете мінімізувати кількість даних, але він також чудово працює на локальному рівні.


Я не можу додати `` форматування до вашої публікації, оскільки це лише два символи. Як ви ставитеся до редагування цього тексту та додавання символів `` навколо вашої команди?
Кулікс

4

Знайдіть опцію "-u" для cpкоманди.


2
Не погоджуйтесь, що використання -u - хороша ідея. -u копіюється лише тоді, коли джерело новітнє або призначення відсутнє. Випуск оригінального плаката з будь-якої причини спричинився порушенням копії файлів. Таким чином, OP матиме напівзаписаний файл, який не оновлювався при повторному запуску копії. Цей файл може бути важливим для когось! rsync вирішує цю проблему.
hazymat

2

Усі наведені вище відповіді правильні, але якщо ви робите це рекурсивно, тоді

вам слід зробити:

 cp -rn SOURCE_PATH DESTINATION_PATH

1

Ви повинні копіювати як root, щоб підтримувати дозволи / права власності

# cp -au

Подивіться також на rsync


1

POSIX рішення

Інші відповіді на використання -u або -nваріанти cp. Жодне з них не вимагає POSIX ; ні rsyncз іншого відповіді; також не yesвикористовується в одному з коментарів.

Тим НЕ менше , ми можемо відтворити yes nз whileпетлею. Це призводить до наступного рішення POSIX:

while true; do echo n; done | cp -Ri /origin /destination 2>/dev/null

0

Використовуйте cp -rn <sourcedirname>/. <destdirname>

Перемикач r робить копію рекурсивною через каталоги.

N перемикач (довга версія no-clobber) гарантує, що існуючі файли ніколи не будуть перезаписані.

' /.' Після джерела прізвища гарантує, що він не стане підкаталогом під desdirname, а не весь вміст першого копіюється на другий.

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