LINUX.ORG.RU
ФорумAdmin

Проверка каталога, вложенных каталогов и файлов на идентичность

 ,


0

1

В связи с замечательным башем cp не копирует скрытые файлы с аргументом ! хочется спросить у Ъ как они сверяют каталог с подкаталогами на тему всё ли скопировалось и не попортились ли в процессе данные. Спрашиваю так как переношу данные с кучи маленьких флешек, некоторые из которых уже приказали долго жить (работает только чтение но не запись) или находятся на конце своей жизни (15+ годиков мелочи пузатой по 1 гб, например, на флешки большие (128 гб). А из маленьких буду делать загрузочные флешки с линуксами на борту, прежде чем проводить их в последний путь они ещё послужат мне на установку убунт. Один фиг 8 гигов флешки, которых у меня большинство, сейчас особого смысла не имеют. Стоит ли мне изобретать велосипед на баше для сверки хешсумм или есть что-то готовое? Может так запросто быть, что копирование с очень старых носителей уже ненадёжно и там мусор.

★★★★★

сверяют каталог с подкаталогами на тему всё ли скопировалось и не попортились ли в процессе данные

Посчитать суммы для всех файлов в директории, рекурсивно:

md5deep -rl . > /tmp/sums

Показать файлы, для которых контрольные суммы не сошлись:

md5deep -x /tmp/sums -r .
i-rinat ★★★★★
()
Ответ на: комментарий от legolegs

по-нормальному

Нормальный вариант у меня. Без лишних опций и со встроенным $() вместо xargs. Мою команду запомнить проще.

В данном конкретном случае работа с сишными строками выглядит терпимо, но если делать из этого в привычку, а смысл именно в этом, то будет оверинжиниринг.

Сами же будете мучаться и ругать какой баш кривой, не замечая того, что эти абсолютно неуместные переводы строк не стоят страданий и всё равно во многих системах запрещены (в POSIX, Windows, Plan 9) и многие чужие программы подразумевают это независимо от ОС.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 4)
Ответ на: комментарий от legolegs

Слишком длинный список аргументов

Докупи оперативной памяти, создай своп, увеличь ARG_MAX (благо на линуксе это законно). Сегодня машины имеют гигабайты памяти. Некоторые пользователи даже веб-браузеры запускают. Динамическая память — не нерешённая проблема, флешка — не петабайтный дата-центр.

Твой вариант работает потому, что xargs запускает команду несколько раз по ~1000 аргументов. Ты знал об этом? Когда в следующий раз будешь «нормально» создавать tar-архив с помощью xargs и увидишь, что часть файлов будет потеряна, вспомни клоуна под этим сообщением.

Надо просто выработать привычку делать нормально и не страдать.

Вот именно.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 9)
Ответ на: комментарий от peregrine

Тут опять будет специальная олимпиада, так что даю правильный ответ для тех, кого гугл забанил в яндексе:

rsync -cn /path/to/src/ /path/to/dst/

Обратить внимание на палки в конце путей, расшифровка буковок - в руководстве.

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

А я не знаю что там может быть на некоторых. Но чем таскать десяток флешек, лучше таскать одну. Я вот diff-ом обходиться привык. И думается мне что он не должен захлебываться от странных символов, но интересно посмотреть на другие варианты.

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

Когда в следующий раз будешь «нормально» создавать tar-архив с помощью xargs и увидишь, что часть файлов будет потеряна, вспомни клоуна под этим сообщением.

Не очень понял. Каким образом происходит потеря данных в xargs?

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

Если аргументов будет больше, чем ARG_MAX (~1000 на macOS, чуть больше в Linux), то xargs несколько раз запустит команду. Попробуй seq 100000 |xargs bash -c 'echo hello world'. Соответственно, обычный xargs tar cf junk.tar перезапишет архив.

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

А, понятно. Думаю, если уж кому-то приспичит добавлять файлы в архив таким образом (честно говоря, ни разу не было необходимости, всегда пакую ровно один каталог, в котором нет лишнего), то пусть используют --append.

anonymous
()
Ответ на: комментарий от peregrine

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

Если cp что то не сможет скопировать он напишет про это.

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

tar та ещё ловушка, если пытаться делать странное, а не паковать один каталог.

Там есть опция –files-from=FILE но она делает совсем не то, что все нормальные программы с подобной опцией. Правильный вызов тар для произвольно большой кучи файлов примерно такой (даже ключей порядок важен)

find ./dir/ -print0 | tar c --verbatim-files-from --null --files-from=- | xz > blah.tar.xz
legolegs ★★★★★
()
Ответ на: комментарий от mx__

Если cp что то не сможет скопировать он напишет про это.

Гораздо хуже. Если цп получит ошибку чтения файла - он оставит на диске недозаписанный файл. У rsync есть разные стратегии поведения в таких сценариях.

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

А толку? В результате у тебя не консистентная копия. При повторной попытке скопировать файлы из того же места ты выберешь вариант "без перезаписи" и огрызок так и останется огрызком.

Ну и оно на каждом файле будет обрываться.

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

При первом копировании (с флешки) он будет знать что вот такой то у него файл не скопировался. Я хз как там ведет себя cp, вон МС предлагает это файл удалить.

Допустим cp не целиком скопировал 1 файл и не сообщил об этом. Тогда всякие контрольные суммы (сделанные сейчас) покажут что и там там файл нормальный, так как они его также подсчитают.

mx__ ★★★★★
()

rmlint --backup -g --hidden -T ... [-D -j] -k -m ... или может rmlint --equal dir1 dir2

Стоит ли мне изобретать велосипед на баше

часто плохая идея

anonymous
()
Ответ на: комментарий от mx__

Флешки это только для переноса инфы. Хранить на флешках нельзя.

Я бы даже сказал, это те же самые дискеты. Если не хуже. Дискетки в основной своей массе хоть только бэдами поростали, т.е. несколько копий на одной дискете уже спасало, а флэшка дохнет в моменте и вся.

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

Допустим cp не целиком скопировал 1 файл и не сообщил об этом. Тогда всякие контрольные суммы (сделанные сейчас) покажут что и там там файл нормальный, так как они его также подсчитают.

Флэшку нужно отмонтировать и заново примонтировать перед подсчетом, ну или сбросить кэши, что скорее менее предпочтительно.

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

Я не про это. Я про то что если в один момент с флешки читается пол-файла, ну или внутри файла образовались нули…

То почему при слеующем монтировании картина изменится?

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

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

Винда такого не позволяет, максимум покажет тупняк в прогресс-баре.

Ну да, канечно... копий о «безопасное извлечение устройств» сломлено море, и моя на пользаке недавно такое же узрела.

anc ★★★★★
()