ИЗМЕНЕНО :После того, как вы сообщили нам, что имеете дело с ~300 файлами, ответы необходимо изменить. В отредактированном ответе ниже замените число 300 точным числом верхней границы -для существующих до -файлов.
for file in mmm.{300..1} ; do mv "${file}" "${file%.*}.$((30+${file#*.}))" ; done
Этот ответ очень эффективен, потому что он делает все внутри bash
, используя bash
собственные возможности, и не требует внешних программ или запуска подпроцессов -.
${file%.*}
возвращает префикс имени файла перед точкой.
`$ ((... ))— идиома математических операций bash.
${file#*.}
возвращает суффикс имени файла после точки. Если вы обеспокоены тем, что у вас могут быть имена файлов с более чем одной встроенной точкой, замените #
на ##
.
См. man bash
для получения дополнительной информации и многих других очень интересных встроенных функций.
Я думаю, что ZFS в основном полагается на контрольные суммы. Когда блок записывается, он также сохраняет для него контрольную сумму SHA256. Обычно он обнаруживает битовую гниль или логические проблемы, восстанавливая исходный блок из блока с правильной контрольной суммой.
Бьюсь об заклад, в вашем случае все проще, так как в половине случаев данные вообще отсутствуют (или, по крайней мере, не обнаружены)
Редактировать :в случае изменения данных, когда диск не обнаружен, из источников C похоже, что vdev_uberblock_compare
будет напрямую проверять метку времени, чтобы определить новейший суперблок и, следовательно, повторное серебро.