Мне нужно скопировать папку / home / user с одного жесткого диска на другой. Он имеет 100 000 файлов и размером около 10G.
я использую
cp -r /origin /destination
иногда я получаю некоторые ошибки из-за неработающих ссылок, разрешений и так далее. Поэтому я исправляю ошибку, и мне нужно снова начать копирование.
Интересно, как я мог сказать команде «cp», как только она пытается скопировать снова, чтобы не копировать файлы снова, если они существуют в папке назначения.
Ответы:
cp -R -u -p /source /destination
-u
( Или--update
) флаг делает именно это:Со страницы руководства для cp:
источник
yes n | cp -i /source/* /destination 2>/dev/null
Просто используйте
cp -n <source> <dest>
.С man-страницы :
источник
rsync -aq /src /dest
Помимо копирования только новых файлов, он будет копировать только новые части файлов, если файл изменился. Он предназначен для копирования по сетевым ссылкам, где вы хотите минимизировать объем данных - но он также отлично работает локально.
источник
Посмотрите опцию "-u" для
cp
команды.источник
Все приведенные выше ответы верны, но если вы делаете это рекурсивно, то
ты должен сделать:
источник
Вы должны копировать с правами root, чтобы сохранить права доступа
Также посмотрите на rsync
источник
Решение POSIX
Другие ответы использовать
-u
или-n
вариантыcp
. Ни из них требуется POSIX ; и неrsync
от другого ответа; ни неyes
используется в одном из комментариев.Тем не менее мы можем воспроизвести
yes n
с помощьюwhile
петли. Это приводит к следующему решению POSIX:источник
использование
cp -rn <sourcedirname>/. <destdirname>
Переключатель r делает копию рекурсивной по каталогам.
Переключатель n (длинная версия no-clobber) гарантирует, что существующие файлы никогда не будут перезаписаны.
Символ '
/.
' после имени источника гарантирует, что он не станет подкаталогом с именем destdir вместо того, чтобы копировать все содержимое первого в последнее.источник