Як копіювати залишилися файли після невдалої спроби


23

Я намагаюся скопіювати великий каталог з одного диска на інший. Я помилково вийшов із системи до її закінчення, тому лише близько 80% файлів скопійовано. Чи є можливість копіювати файли, що залишилися, не починаючи з нуля?

Відповіді:


35

Я б спробував,

rsync -a /from/file /dest/file

Ви можете використовувати інші варіанти , як --append, -P (--partial --progress). Для отримання додаткової інформації див. 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: "непусті" чорнослив порожні калини

-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 repo на резервному диску та "натиснути" на нього. Знову ж таки, це дійсно спрацьовує, якщо файли базуються на тексті та якщо ви намагаєтесь зробити резервну копію в один бік.

Знову ж таки, якщо ви збираєтесь зробити резервну копію (і не лише один раз), тоді подивіться на 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.