Как скопировать оставшиеся файлы после неудачной попытки


23

Я пытаюсь скопировать большой каталог с одного диска на другой. Я ошибочно вышел из системы до того, как она была закончена, поэтому скопировали только около 80% файлов. Можно ли скопировать оставшиеся файлы, не начиная с нуля?

Ответы:


35

Я бы попробовал,

rsync -a /from/file /dest/file

Вы можете использовать другие варианты , как --append, -P (--partial --progress). Смотрите man rsync для получения дополнительной информации.

Или, если вы используете, cpто используйте cp -u.

от man cp:

-u, --update
     copy only when the SOURCE file is newer than the destination file or when the destination file is missing.

1
Я должен передать это Рахулу, потому что он просто побил тебя этим, но спасибо, и все получают голос!
barro32

3
Если первая копия закончилась внезапно, один из файлов может быть скопирован только частично, и это cp -uможет не заботиться, поскольку он проверяет только временные метки, а не размер ... Поэтому вам touchсначала нужно будет получить доступ к исходным файлам, если вам нужно его использовать , (Или просто используйте rsync.)
ilkkachu

@ilkkachu это верно. Я скоро обновлю это.
Рахул

Оставляет ли cp когда-либо один файл, переданный только частично? Если это так, то -u, похоже, оставит вам каталог, который работал только частично.
Тревор

15

Для частичной передачи файлов cpможет быть не то, что вам нужно.

Я предлагаю использовать rsyncвместо этого. Даже если передача не удалась, вы можете просто запустить команду позже, и она скопирует только отсутствующие файлы.

Пример:

$ rsync -aPEmivvz from/ to/

(скопирует from/в to/каталог)

Поскольку rsyncвыполняется синхронизация и проверка после каждой передачи, обеспечение правильного копирования файлов является тривиальным.

Swich набор -aPEmivvzмой стандартный идти к выбор, когда копирование файлов по сети или внешних накопителей, в том числе плагин устройств, как SD-карты и т.д.

Эти ключи я использую почти всегда:

-a: "архив", включает в себя -rlptgo(рекурсивные, символические ссылки как символические ссылки, разрешения, время, группа, владелец)

-P: "частичный прогресс" показывает хороший индикатор выполнения для каждого файла

-E: «исполняемый» сохраняет ли исполняемый или нет

-m: "noempty" чернослив пустые dirs

-i: "сводка" распечатать сводку изменений для всех обновлений

-vv: "более многословный"

-z: "сжатие"


6

То, что вы, вероятно, хотите, а не cpв этом случае rsync.

Просто рекурсивно копируем одну структуру каталогов в новое место:

rsync -av /path/to/source /path/to/destination 

4

Вы не должны использовать cpдля этого. Как утверждают другие, это не правильный инструмент для работы. Правильный инструмент будет зависеть от ваших целей.

Если вы просто хотите получить прямую копию:

rsync /source /destinationс некоторым уровнем флагов. Посмотрите другие ответы для некоторых действительно хороших примеров.

Если вы хотите получать двунаправленные обновления

unisonэто путь Rsync не очень хорошо справляется с разрешением конфликтов с помощью двунаправленной синхронизации. Специально удаляет. Таким образом, вы хотите, чтобы двунаправленные копии запускалисьunison

Если вы хотите, чтобы резервные копии и файлы были текстовыми, то вы можете попробовать использовать git. Git может быть запущен локально, нет необходимости в «сервере». На самом деле, git-серверы - это только методы обмена файлами. Вы можете полностью создать git-репо на резервном диске и «протолкнуть» его. Опять же, это действительно работает, только если файлы основаны на тексте, и вы пытаетесь получить одностороннюю резервную копию.

Опять же, если вы собираетесь сделать резервную копию (а не только один раз), посмотрите на deja-dupe, BackIntime или аналогичные параметры. Они делают снимки данных в определенный момент времени. Все они запускают rsync под капотом.


4

Вы также можете снова скопировать все файлы, запросить подтверждение для каждой перезаписи, а затем автоматически ответить «нет» на вопрос:

yes n | cp -i /source /dest

(вы, вероятно, использовали больше опций, например -r, просто добавьте их как cp -pri /source /dest...)


3

Используйте команду rsyncсо следующими параметрами:

rsync --progress --partial --append /source_file /destination_file
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.