Переместите определенные файлы из нескольких каталогов

Linux (ядро) не заботится, сколько разделов начальной загрузки Вы имеете. Загрузка ядра от диска является заданием загрузчика (например. grub, grub2, lilo) и эти инструменты также не заботятся о количестве местоположений, ядро могло бы быть расположено. Они только заботятся об определенном местоположении.

Как пример, мой раздел начальной загрузки /dev/md1, который является mdadm зеркалом RAID, поддержанным физическими разделами /dev/sde1 и /dev/sdf1. Я могу смонтировать их индивидуально, если я хотел и как таковой, это технически рассчитывает как наличие двух разделов начальной загрузки, хотя они должны содержать те же данные.

Наличие двух разделов для начальной загрузки / для меня является проблемой доступности, но они могли одинаково быть различными / разделами начальной загрузки. Следующий шаг к - то, как загрузчик знает? Вот то, как:

menuentry 'Linux 3.10.17 (sde) kernel-3.10.17-g' {
        root=hd0,1
        linux /boot/kernel-3.10.17-g domdadm dolvm root=/dev/md3
        initrd /boot/initrd-3.10.17-g
}

menuentry 'Linux 3.10.17 (sdf) kernel-3.10.17-g' {
        root=hd1,1
        linux /boot/kernel-3.10.17-g domdadm dolvm root=/dev/md3 
        initrd /boot/initrd-3.10.17-g
}

Это - выборка от a grub2 конфигурация и Вы отметите, что единственные различия root=hd0,1 и root=hd1,1 которые устанавливают который раздел начальной загрузки та запись ссылки.


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

  • BIOS читает MBR из загрузочного тома и переходов к загрузчику
  • Загрузчик (например. grub2) настроен для знания, какое устройство и раздел содержат ядро. Grub2 получает доступ к этому разделу непосредственно и загружает Ваше ядро в память.
  • Ваш загрузчик затем вскакивает в ядро, и ядро загружает Вашу машину.

Загрузчик не заботится, сколько разделов начальной загрузки Вы имеете, он только заботится, где они, и необходимо сказать ему ту информацию.

Ядро не заботится, сколько разделов начальной загрузки Вы имеете, потому что оно никогда не должно видеть их (только необходимо иметь его в наличии для добавления новых ядер, например).

2
09.01.2015, 13:37
2 ответа

В системе GNU:

find dir -type f -name '*.txt' -exec awk '
    FNR == 2 {printf "%s\0", FILENAME; nextfile}' {} + |
  xargs -r0 mv -t newdir

(обратите внимание, что это может привести к тому, что одноименные файлы будут перезаписывать друг друга. Однократное обращение к GNU mv защитит от этого, но если xargs обратится к нескольким, то это может стать проблемой).

4
27.01.2020, 21:56

Что-то вроде этого с shell / bash:

move_files_with_line_count()
(
   srcdir="$1"
   destdir="$2"
   suffix="$3"
   minlines="$4"

   cd "$srcdir"
   find . -name "*$suffix" -type f -print0 \
      | while read -r -d $'\0' file; do

         linecnt=$(wc -l "$file" | { read a b; echo $a; }; )

         if [ $linecnt -ge $minlines ]; then

            [ -d "$destdir/${file%/*}" ] \
               || echo mkdir -p "$destdir/${file%/*}"

            echo mv -v "$file" "$destdir/$file"

         fi
   done
)

Я окружил его (), так что он восстанавливает текущий каталог. Удалите "echo" перед "mkdir" и "mv", если это работает по назначению.

1
27.01.2020, 21:56

Теги

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