Создание нового initrd, не устанавливая ядро

Все каталоги на одном уровне, или рекурсивно?

Zsh

На одном уровне:

autoload zmv
zmv -o-i -Q 'root/(*)(/)' 'root/${1:l}'

Рекурсивно:

zmv -o-i -Q 'root/(**/)(*)(/)' 'root/$1${2:l}'

Объяснения: zmv переименовывает файлы, соответствующие шаблону согласно данному тексту замены. -o-i передачи -i опция каждому mv команда под капотом (см. ниже). В тексте замены, $1, $2, и т.д., последовательные заключенные в скобки группы в шаблоне. ** средства весь (sub) *directories, рекурсивно. Финал (/) не заключенная в скобки группа, а спецификатор шарика, означающий соответствовать только каталогам. ${2:l} преобразовывает $2 к нижнему регистру.

Портативный

На одном уровне:

for x in root/*/; do mv -i "$x" "$(printf %s "$x" | tr '[:upper:]' '[:lower:]')"; done

Финал / ограничивает соответствие каталогами, и mv -i заставляет его попросить подтверждение в случае коллизии. Удалите -i перезаписывать в случае коллизии и использования yes n | for …. чтобы не быть запрошенным и не выполняют любое переименование, которое столкнулось бы.

Рекурсивно:

find root/* -depth -type d -exec sh -c '
    t=${0%/*}/$(printf %s "${0##*/}" | tr "[:upper:]" "[:lower:]");
    [ "$t" = "$0" ] || mv -i "$0" "$t"
' {} \;

Использование -depth гарантирует, что глубоко вложенные каталоги обрабатываются перед их предками. Обработка имени полагается на то, чтобы там быть a /; если Вы хотите звонить, работают в текущем каталоге, используют ./* (адаптация сценария оболочки для преодоления . или * оставлен как осуществление для читателя).

Perl переименовывает

Здесь я использую Perl, переименовывают сценарий, который Debian и Ubuntu поставляют как /usr/bin/prename (обычно доступный как rename также). На одном уровне:

rename 's!/([^/]*/?)$!\L/$1!' root/*/

Рекурсивно, с ударом ≥4 или zsh:

shopt -s globstar  # only in bash
rename 's!/([^/]*/?)$!\L/$1!' root/**/*/

Рекурсивно, портативно:

find root -depth -type d -exec rename -n 's!/([^/]*/?)$!\L/$1!' {} +
3
17.03.2011, 22:28
1 ответ

Создание initrd не имеет никакого отношения к установке ядра. Все, что Вы делаете, должно создать файловую структуру для initrd, скопировать необходимые файлы, записать init сценарию и пакету все это в архив cpio. Я использовал инструкции в хинду Wiki для создания моего initrd. Некоторые дистрибутивы делают инструменты для генерации initrds, и для которого необходимо будет назвать дистрибутив. Например, Дуга имеет mkinitcpio.

initramfs является просто другой (более новой) реализацией начального электронного диска. Я не знаю наверняка, но я думаю современные дистрибутивы все использование initramfs. Когда Вы видите "initrd", это может быть сокращение от "начального электронного диска", и таким образом это покрывает и initrd и initramfs.

3
27.01.2020, 21:24

Теги

Похожие вопросы