LINUX.ORG.RU

Пара вопросов о копировании

 


0

1

1. Большой файл копировали с носителя на носитель. Прервали на 95 %. Как теперь продолжить копирование, не передавая заново весь файл?

2. В компьютере 1 есть каталог А, в компьютере 2 — каталог Б. Связь между компьютерами через «флопонет». Как сравнить каталоги А и Б (по именам и размерам файлов) и увидеть разницу? Как скопировать в каталог В то, что есть в А, но отсутствует в Б?

★★

По первому пункту не понятно, кусок файла на 95% скопированный остался на носителе или нет. Обычно то, что недокопировалось не существует в виде файла.

А по поводу флоппинета, дак получите списки файлов из обоих каталогов и сравните их.

Вопросы как-то подозрительно на лабу похожи.

mky ★★★★★
()

С 1) многое зависит от того, какие носители, какие опции монтирования, какая ФС. Дописать можно попробовать rsync'ом.

С 2) - find, sort, md5sum, wc... Объяснишь, что значит «флопонет» (я исхожу из того, что это связь только с помощью внешних носителей) - может, что-то ещё придумать можно.

tiandrey ★★★★★
()
Последнее исправление: tiandrey (всего исправлений: 1)
Ответ на: комментарий от mky

По первому пункту не понятно, кусок файла на 95% скопированный остался на носителе или нет. Обычно то, что недокопировалось не существует в виде файла.

Остался, конечно. Как вообще надо копировать, чтоб оно «не существовало в виде файла»?

А по поводу флоппинета, дак получите списки файлов из обоих каталогов и сравните их.

Утилиту хочу готовую, чтоб самому велосипед не изобретать.

fffgh ★★
() автор топика
Ответ на: комментарий от tiandrey

какие опции монтирования, какая ФС.

Да какая разница? Лежит файл, 90 % от оригинала. Надо «дописать».

можно попробовать rsync'ом.

Вот.

find, sort, md5sum, wc...

Не хочу сам это сочинять, готовое бы.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

Да какая разница?

Большая. Что было на том месте, куда записывается файл? Нолики? Единички? Случайные данные? Как записался файл? Последовательно? Фрагментами? И т.д., и т.п.

tiandrey ★★★★★
()
Ответ на: комментарий от fffgh

То, что в тегах указано ″cp″ лично мне не говорит, что копирование было именно из командной строки с помощью утилиты ″cp″, а не, допустим, ″mc″ и было прервано по Ctrl-C, а не выдёргиванием флешки.

Если хотите просто дописать, возмите размер файла и команду dd, как-то так:

SZ=`stat --printf '%s' COPY_FILE_NAME`
dd bs=$SZ if=ORIG_FILE_NAME of=COPY_FILE_NAME skip=1 seek=1

Что касается флопинета, то простой скрипт состряпать быстро, но не будет расчитан на имена файлов, содержащие переводом строки. Поэтому пишите лучше сами.

mky ★★★★★
()
Ответ на: комментарий от tiandrey

Что было на том месте, куда записывается файл? Нолики? Единички? Случайные данные? Как записался файл?

И правда, мало ли что там записалось. Задача усложняется.

fffgh ★★
() автор топика
Ответ на: комментарий от mky

возмите размер файла и команду dd

Неплохо. Но тут tiandrey сеет сомнения — а действительно ли в этом «недокопированном» файле будет содержимое исходного?

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

Зависит от того, как было прервано копирование. Если программно (убит процесс, который писал), то ядро запишет в файл ровно то, что туда успело записаться. Если аппаратно, то действительно может быть непонятно что.

Наверное, можно для страховки прочитать несколько последних килобайт недокопированного файла и сравнить их с содержимым исходного файла. Но сомневаюсь, что где-то есть утилита, делающая подобное.

mky ★★★★★
()
Ответ на: комментарий от mky

Но сомневаюсь, что где-то есть утилита, делающая подобное.

rsync же! Разбивает на части и считает контрольные суммы.

Pythagoras ★★
()
Ответ на: комментарий от Pythagoras

Где я писал про подсчёт контрольной суммы?

Ситуация. На внешний медленный носитель копировали файл размеров X Гбайт. Когда было недокопировано 100 Мбайт было нажато Сtrl+C. Нахрена считать контрольную сумму кучи байт (прочитывать весь файл)? Нужно сравнить хвост файла, убедится что там нет мусора и дописать.

mky ★★★★★
()
Ответ на: комментарий от fffgh

пара «|» в строчке bash - это еще не велосипед, это называется unix-way

find . -exec ls -l '{}' ';' > result.1

потом то же самое на соседнем компе, результаты переносишь на одну машину и сравниваешь каким-нибудь diff-ом по вкусу

MyTrooName ★★★★★
()
Ответ на: комментарий от Pythagoras

насколько я понимаю, rsync заново прочитает и source, и destination.

быстрее с нуля переписать cp

Как теперь продолжить копирование, не передавая заново весь файл?

хотя формально rsync самое оно, да)

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от MyTrooName

″find″ же умеет выводить нужные свойства файла, зачем на каждый файл вызывать ″ls″, да ещё получать в выводе мешающие сравнению права доступа/владельца:

find . -printf '%-60p %s\n'

А если уж делать с ″ls″, то, либо ″ls -l -d″, либо ″find -type f″, иначе ″ls″ все подкаталоги распишет по файлам.

mky ★★★★★
()

2. unison, если не ошибаюсь.

greenman ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.