Я знаю, что это старый пост, но недавно у меня была та же проблема, которая была исправлена следуя довольно конкретной ошибке, которую мне сообщили:
lxc-create: my-container: conf.c: suggest_default_idmap: 4738 You must either run as root, or define uid mappings
lxc-create: my-container: conf.c: suggest_default_idmap: 4739 To pass uid mappings to lxc-create, you could create
lxc-create: my-container: conf.c: suggest_default_idmap: 4740 ~/.config/lxc/default.conf:
lxc-create: my-container: conf.c: suggest_default_idmap: 4741 lxc.include = /etc/lxc/default.conf
lxc-create: my-container: conf.c: suggest_default_idmap: 4742 lxc.idmap = u 0 100000 65536
lxc-create: my-container: conf.c: suggest_default_idmap: 4743 lxc.idmap = g 0 100000 65536
lxc-create: my-container: lxccontainer.c: do_lxcapi_create: 1869 Failed to create (none) storage for my-container
lxc-create: my-container: tools/lxc_create.c: main: 327 Failed to create container my-container
Это было довольно легко исправить:
mkdir -p ~/.config/lxc
touch ~/.config/lxc/default.conf
echo "lxc.include = /etc/lxc/default.conf" >> ~/.config/lxc/default.conf
echo "lxc.idmap = u 0 100000 65536" >> ~/.config/lxc/default.conf
echo "lxc.idmap = g 0 100000 65536" >> ~/.config/lxc/default.conf
Не забудьте обновить идентификаторы пользователей и групп
Кроме того, примечание, если вы получаете сообщение об ошибке:
Setting up the GPG keyring
ERROR: Unable to fetch GPG key from keyserver
Вот из-за этого:https://github.com/lxc/lxc/issues/3068
Чтобы это исправить, просто добавьте -- --keyserver hkp://p80.pool.sks-keyservers.net:80
в конец команды создания, например.
lxc-create -t download -n my-container -- --keyserver hkp://p80.pool.sks-keyservers.net:80
Надеюсь, это поможет другим, по крайней мере, вам не помогло
Если вы используете оболочку bash
, вы можете использовать seq
или jot
для создания «идеального» выходного эталонного образца, а затем сравнить вывод ls -1
с этим эталоном:
$ diff <(ls -1) <(seq -f 'file_%04g.jpeg' 999)
Это не только покажет вам все отсутствующие файлы, но и найдет посторонние файлы.
В то время как другие ответы предоставляют способы точно определить , какие файлы отсутствуют, первоначальный вопрос о том, отсутствует ли какой-либо файл, можно проверить в более удобном -удобном для ввода виде. способ.
Ваш список является результатом ls -1
, поэтому передача его в wc должна дать вам количество файлов, совпадающих с именем последней записи.
ls -1 | wc -l
Если число не соответствует имени последнего файла, значит, файл отсутствует.
(Оказывается, этот вопрос был дубликатом,и то, что я использую, совпадает с верхним ответом на Как напечатать имя отсутствующих файлов в папке?)
Для интерактивного использования в bash , быстрого и легкого ввода и запоминания:
Обычно я использую раскрывающуюся скобку {01..99}
для создания ожидаемого ряда и ищу ls
ошибки :
ls file_0{001..999}.jpeg > /dev/null
Перенаправление скрывает стандартный вывод списка существующих файлов, но стандартный вывод остается подключенным к терминалу. Иногда я пропускаю >/dev/null
и просто прокручиваю назад в терминале, если файлов меньше ~100, потому что сообщения об ошибках появляются первыми, в то время как ls
все еще читает свои аргументы перед сортировкой и печатью. Это также подтверждает, что я набрал его правильно, и мой шаблон — это , соответствующий файлам, которые я действительно хотел (, особенно если он включает в себя glob ).
Для передачи/захвата вы можете foo=$(ls... 2>&1 >/dev/null)
перенаправить stderr в конвейер, а затем перенаправить stdout в /dev/null, оставив stderr в конвейере оболочки. Это было бы полезно для проверки пустого/не пустого -вывода ошибок. Но в скрипте, если вы хотите получить имена отсутствующих файлов, посмотрите другие ответы вместо того, чтобы пытаться анализировать их из ls
сообщений об ошибках, которые могут быть интернационализированы и т. д.
Если вы хотите/если необходимо, вы можете использовать кавычки в других частях имени файла, например 'foo bar '{01..22}.jpg
. Или даже foo\ bar\ {01..22}*.jpg
для расширения до 'foo bar '01*.jpg
/ 'foo bar '02*.jpg
и т. д., поэтому он работает, даже если где-то есть какое-то дополнительное уникальное имя для некоторых или всех файлов, кроме порядковых номеров.
Это работает, даже если ваша нумерация не использует ведущие нули, например. {1..99}
вместо {01..99}
. Если вы хотите включить начальные нули в диапазон фигурных скобок, вы можете сделать что-то вроде {01..09}
, что работает так, как вы надеетесь, вместо того, чтобы выносить их из выражения фигурной скобки, как я сделал в примере.
Обратите внимание, что современные системы Linux поддерживают очень длинные списки аргументов, например, 128 КБ текста .Этот метод зависит от создания командной строки с каждым файлом в ней. Это на 100% подходит для интерактивного использования :, в редких случаях, когда список слишком велик, оболочка сообщит вам об этом.
В другом ответе использовался for
цикл по списку, который будет медленнее (запускать отдельный ls
для каждого файла ), но безопасен даже в огромной или более ограниченной системе с большим количеством файлов. меньшие пределы argv.