Предполагая, что / в настоящее время является корневым подтомом вашей файловой системы 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. Процесс достаточно прост :переименуйте подтом, а затем создайте моментальный снимок для чтения -записи из выбранного вами моментального снимка.
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
Перезагрузите компьютер, чтобы восстановление вступило в силу.
Если я правильно понимаю вашу спецификацию -, которая не слишком ясна, не соответствует -, вам нужно два цикла для
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
Косметические исправления в файле результатов (, такие как печать заголовка, форматирование строк ), остаются на усмотрение читателя.
Идея решения этой проблемы
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
подходит для обработки только одного файла. (Здесь он используется таким образом. )Если вы хотите обработать все выходные файлы за один раз, сценарий необходимо изменить.