18.04 чистая установка сервера завершается с ошибкой на `curtin command block-meta '

Python имеет os.walk, что делает такие задачи такими же легкими, интуитивно понятными и автоматически надежными даже перед лицом странных имен файлов, таких как те, которые содержат символы новой строки. Этот сценарий Python 3, который я изначально разместил в чате, предназначен для запуска в текущем каталоге (но он не должен находиться в текущем каталоге, и вы можете изменить его путь к os.walk), :

#!/usr/bin/env python3

import os

dc = fc = 0
for _, _, fs in os.walk('.'):
    c = sum(f.endswith('.c') for f in fs)
    if c:
        dc += 1
        fc += c
print(dc, fc)

Это печатает количество каталогов, в которых содержится хотя бы один файл, имя которого заканчивается на .c, за которым следует пробел, за которым следует количество файлов, имена которых заканчиваются на .c , «Скрытые» файлы, то есть файлы, имена которых начинаются с ., включены, а скрытые каталоги аналогичным образом пересекаются.

os.walk Он перечисляет все каталоги, которые рекурсивно доступны из исходной точки, которую вы им даете, приводя информацию о каждом из них как кортеж из трех значений root, dirs, files. Для каждого каталога он переходит к (включая первый, имя которого вы даете ему):

root содержит путь к этому каталогу. Обратите внимание, что это абсолютно не связано с «корневым каталогом» системы / (а также не связано с /root), хотя оно будет идти к тем, если вы начнете там. В этом случае root начинается с пути . - i.e., Текущего каталога - и проходит повсюду под ним. dirs содержит список путей всех подкаталогов каталога, имя которого в настоящее время хранится в root. files содержит список путей всех файлов, которые находятся в каталоге, имя которого в настоящее время хранится в root, но которые не являются самими каталогами. Обратите внимание, что это включает в себя другие типы файлов, чем обычные файлы, включая символические ссылки, но похоже, что вы не ожидаете окончания таких записей в .c и заинтересованы в том, чтобы видеть что-либо подобное.

В этом случае мне нужно только изучить третий элемент кортежа, files (который я называю fs в скрипте). Как и команда find, Python os.walk перемещается в подкаталоги для меня; единственное, что я должен проверить сам, это имена файлов, в которые каждый из них содержится. В отличие от команды find, os.walk автоматически предоставляет мне список этих имен файлов.

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

Если вы когда-либо хотели os.walk следовать символическим ссылкам, что вы обычно не хотели, то вы можете передать followlinks=true на него. То есть вместо записи os.walk('.') вы можете написать os.walk('.', followlinks=true). Я повторяю, что вы редко этого хотели, особенно для такой задачи, в которой вы рекурсивно перечисляете всю структуру каталогов, независимо от того, насколько она велика, и подсчитывая все файлы в ней, которые удовлетворяют некоторым требованиям.

2
задан 6 May 2018 в 00:42

4 ответа

У меня была такая же ошибка с установщиком, пытающимся удалить раздел LVM.

После сбоя установки выберите команду перейти в командную строку. Оттуда:

$ sudo fdisk -l (to see the drive name and see the partitions)

$ sudo parted

p

select /dev/sda (or whatever your drive is named)

p (too show the partitions and their numbers)

rm 1

rm 2

(etc until they are all gone)

q

$ sudo fdisk -l (verify the partitions are gone)

Перезагрузитесь и установите снова.

2
ответ дан 22 May 2018 в 10:57
  • 1
    Гораздо проще помочь, когда вы используете правильное форматирование . – earthmeLon 13 May 2018 в 00:01
  • 2
    Да, как сказал удаленный комментарий rant-y, LVM виноват, хотя я не совсем понимаю, почему. Я закончил fdisk -разделение разделов вручную, после чего все прошло гладко. Thanx за вашу помощь! – Sebastiaan 14 May 2018 в 17:00
  • 3
    earthmeLon, спасибо. Это был мой первый пост, и это было сделано с телефона. Надеюсь, я улучшу свои будущие должности. – Michael Blasius 14 May 2018 в 17:11

У меня была такая же ошибка с установщиком, пытающимся удалить раздел LVM.

После сбоя установки выберите команду перейти в командную строку. Оттуда:

$ sudo fdisk -l (to see the drive name and see the partitions) $ sudo parted p select /dev/sda (or whatever your drive is named) p (too show the partitions and their numbers) rm 1 rm 2 (etc until they are all gone) q $ sudo fdisk -l (verify the partitions are gone)

Перезагрузитесь и установите снова.

4
ответ дан 17 July 2018 в 15:07

У меня была такая же ошибка с установщиком, пытающимся удалить раздел LVM.

После сбоя установки выберите команду перейти в командную строку. Оттуда:

$ sudo fdisk -l (to see the drive name and see the partitions) $ sudo parted p select /dev/sda (or whatever your drive is named) p (too show the partitions and their numbers) rm 1 rm 2 (etc until they are all gone) q $ sudo fdisk -l (verify the partitions are gone)

Перезагрузитесь и установите снова.

4
ответ дан 20 July 2018 в 15:32

У меня была такая же ошибка с установщиком, пытающимся удалить раздел LVM.

После сбоя установки выберите команду перейти в командную строку. Оттуда:

$ sudo fdisk -l (to see the drive name and see the partitions) $ sudo parted p select /dev/sda (or whatever your drive is named) p (too show the partitions and their numbers) rm 1 rm 2 (etc until they are all gone) q $ sudo fdisk -l (verify the partitions are gone)

Перезагрузитесь и установите снова.

4
ответ дан 23 July 2018 в 16:04

Другие вопросы по тегам:

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