очень сложный цикл. Кто-нибудь может мне помочь?

Создание подтомов для / и /home

Предполагая, что / в настоящее время является корневым подтомом вашей файловой системы BTRFS, вам необходимо сначала создать подтома, а затем переместить каталоги в соответствующие подтома.

ВНИМАНИЕ:Прежде чем использовать любую из следующих команд, убедитесь, что вы прочитали о них и поняли, как они работают.

cd /
btrfs subvol create rootfs
btrfs subvol create homefs
cp -a --reflink=always bin usr root var rootfs/ # This is just a sample of directories to copy. But DON'T copy home.
cp -a --reflink=always home/* homefs/

Затем отредактируйте /etc/fstabи измените точку монтирования / так, чтобы она использовала подтом rootfs. Это делается путем добавления опции (-или )subvol=rootfs. Затем добавьте точку монтирования для /home, используя подтом homefs. Вам также необходимо обновить корневую файловую систему, настроенную в вашем загрузчике.

Наконец, перезагрузите компьютер и убедитесь, что используются новые точки подключения. Если все в порядке, вы можете временно смонтировать корневой подтом (в такой каталог, как /root/btrfs ), и удалить исходные каталоги, которые вы скопировали.

Создание снимков

Лично у меня есть подтом, содержащий мои снимки. Таким образом, я могу монтировать снимки, скажем. /mnt/snapshotsи иметь легкий доступ к файлу, который я мог случайно удалить.

Настройка

mkdir /root/btrfs
mount /dev/WHATEVER /root/btrfs
cd /root/btrfs
btrfs subvol create snapshots

Пример создания моментального снимка -только для чтения

mount /dev/WHATEVER /root/btrfs
cd /root/btrfs
btrfs subvol snapshot -r rootfs snapshots/rootfs-2019-04-11

Восстановление из моментального снимка

Для восстановления из моментального снимка не требуется LiveCD. Процесс достаточно прост :переименуйте подтом, а затем создайте моментальный снимок для чтения -записи из выбранного вами моментального снимка.

Пример восстановления моментального снимка rootfs.

mount /dev/WHATEVER /root/btrfs
cd /root/btrfs
mv rootfs rootfs-old # Even though rootfs would be mounted, you can still rename it without affecting the running system.
btrfs subvol snapshot snapshots/rootfs-2019-04-10 rootfs

Перезагрузите компьютер, чтобы восстановление вступило в силу.

0
26.03.2020, 13:37
2 ответа

Если я правильно понимаю вашу спецификацию -, которая не слишком ясна, не соответствует -, вам нужно два цикла для

a )найти основные файлы.pdb и

b )соответствующие карманные файлы.

После создания (и перезаписи старых версий )файла output.txtиспользуйте awkдля извлечения нужных полей в результирующий файл. После редактирования cdв каталоге ALLпопробуйте

for FN1 in *.pdb                                                                # loop across all.pdb files
  do    PN="${FN1##*/}"
        PN="${PN%.pdb}"                                                         # construct subdir name
        for FN2 in "${PN/_/.}"/*.pdb                                            # 2nd loop across.pdb files in subdir
          do    "....." -ps -i "$FN1" -gl "$FN2" -o output.txt                  # create output.txt in parent dir
                awk -F: 'FNR == 2  ||                                           # extract desired fields
                         /^AAAAA/  ||
                         /^BBBBB/       {sub (/^ */, "", $2)
                                         printf "%20s%s", $2, /^BBBB/?"\n":""
                                        }
                        ' output.txt >> SUMMARY_ALL.txt                         # and append to result file
          done
  done

Косметические исправления в файле результатов (, такие как печать заголовка, форматирование строк ), остаются на усмотрение читателя.

0
28.04.2021, 23:19

Идея решения этой проблемы

  • cdв базовый каталогhome/Desktop/Work
  • цикл по всем каталогам????_?(циклическая переменнаяdir)
    • если есть соответствующий файл $dir.pdb
      • cdв каталог$dir
      • зациклить все Pocket_*_$dir.pdb
        • запустить команду для обработки данных и создания соответствующего выходного файла
        • в случае успеха извлечь данные из выходного файла в стандартный вывод
      • при необходимости cdвернуться в родительский каталог
  • поместить вывод этого цикла (, то есть все извлеченные данные )вALL_SUMMARY.txt
cd home/Desktop/Work
# edit: remove old summary file because now the script will append to it
rm SUMMARY_ALL.txt
for dir in ????_?
do
    if [ -f "$dir/$dir.pdb" ]
    then
        cd "$dir"
        for pocket in Pocket_*_"$dir.pdb"
        do
            out="${pocket%.pdb}_OUTPUT.txt"
            # edit: if the command '....' prints output this will end up in the summary file
            # '....' -ps -i "$dir.pdb" -gl "$pocket" -o "$out" && awk '/Pocket File:/ {pocket=$NF} /AAAAAAAAAAAAAAAAAA:/ {aaa1=$(NF-1);aaa2=$NF} /BBBBBBBBBBBBB:/ {bbb=$NF} END {print pocket,aaa1,aaa2,bbb}' "$out"
            '....' -ps -i "$dir.pdb" -gl "$pocket" -o "$out" && awk '/Pocket File:/ {pocket=$NF} /AAAAAAAAAAAAAAAAAA:/ {aaa1=$(NF-1);aaa2=$NF} /BBBBBBBBBBBBB:/ {bbb=$NF} END {print pocket,aaa1,aaa2,bbb}' "$out" >>../SUMMARY_ALL.txt
        done
        cd..
    fi
# edit: avoid putting other output into summanry file
# done > SUMMARY_ALL.txt
done

Примечания:

Код не проверен.

Я предполагаю, что ваша команда для создания выходного файла завершается со статусом 0 в случае успеха и !=0 в случае ошибки, чтобы использовать &&между этой командой и командой awkдля извлечения данных.

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

0
28.04.2021, 23:19

Теги

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