Рейтинг:0

mkdir, в то время как истинный цикл останавливается на 406 папках

флаг ar

Может ли кто-нибудь объяснить, почему мой скрипт перестает создавать папки в 406 папках, и сказать мне, как заставить его работать?

#!/бин/баш
rm -rf бесконечный2
пока правда  
делать

мкдир бесконечный2
cd ./infinite2
мкдир бесконечный1
кд ./бесконечный1

сделано

Я потратил пару дней, пытаясь понять это, и не мог найти, почему это не работает.

Soren A avatar
флаг mx
Похоже, вы достигли максимальной длины пути на 4096 символов...
waltinator avatar
флаг it
Что такое базовая файловая система? Проверьте с помощью `mount`.
Eli Thrash avatar
флаг ar
Как я могу получить больше папок. Это вообще возможно?
Eli Thrash avatar
флаг ar
Базовая файловая система? Будет ли это /
Eli Thrash avatar
флаг ar
Я пытался сделать как минимум 125000000 папок
Eli Thrash avatar
флаг ar
`~$ getconf -a | grep PATH_MAX PATH_MAX 4096 _POSIX_PATH_MAX 4096`
terdon avatar
флаг cn
Пожалуйста [отредактируйте] свой вопрос и дайте нам некоторый контекст. Вам действительно нужно сделать путь глубиной 125000000 или вам просто нужно 125000000 папок? Я имею в виду, действительно ли это должно быть `d1/d2/d3/.../f125000000` в одном дереве каталогов, или вы бы согласились с `parentFolder/dir1`, `parentFolder/dir2` ... `parentFolder/ дир125000000`? Еще лучше, зачем вам это нужно? Если вы объясните, что вы хотите на самом деле протестировать/достичь, возможно, мы сможем предложить вам лучший подход для этого.
FedKad avatar
флаг cn
Как уже прокомментировал @terdon, это типичная https://en.wikipedia.org/wiki/XY_problem, поэтому я голосую за закрытие этого вопроса!
Eli Thrash avatar
флаг ar
Я просто хочу сделать ```parentFolder/dir1, parentFolder/dir2 ... parentFolder/dir125000000``
terdon avatar
флаг cn
@EliThrash, тогда, пожалуйста, отредактируйте и объясните это, потому что, даже если бы это сработало, это не то, что создал бы ваш сценарий. Похоже, вы просто хотите `mkdir parentFolder/dir{1..125000000}`, что, вероятно, не удастся, потому что вы передадите значение MAX_ARG для максимальных аргументов в командной строке или сломаете свою машину, поскольку у нее заканчивается ОЗУ, пытаясь вычислить это расширение скобки, но может работать как отправная точка.Нам просто нужно знать, чего вы действительно хотите.
Рейтинг:3
флаг cn

В своем исходном вопросе вы пытаетесь создать иерархию файлов следующим образом:

.
ââ бесконечный2
â âââ бесконечный1
...
â (глубокий бесконечный уровень) âââ бесконечный2

и ваш скрипт начинает получать ошибки, когда ваша "глубина" достигает 406-го "уровня". Не существует известной файловой системы, которая может содержать столько уровней подкаталогов, сколько вам нужно.

Однако в ваших комментариях кажется, что вам нужна такая иерархия каталогов:

.
âââ dir000000001
âââ dir000000002
...
âââ dir124999999
âââ дир125000000

Хотя возможно создать такое огромное количество один уровень подкаталоги в каталоге, используя такой скрипт:

#!/бин/баш
пусть я = 0
в то время как (( я < 125000 ) ); делать
  mkdir $(printf "dir%06d" $i){000..999}
  пусть я++
сделано

это было бы очень очень очень (Я сказал достаточно раз очень?) неэффективно их создавать и использовать. я был возможность протестировать этот скрипт, создав более двух миллионов каталогов; но 125 миллионов каталогов — это слишком много.

Лучшей альтернативой было бы создание трехуровневой структуры, в которой каждый уровень содержал бы тысячу подкаталогов в такой иерархии:

.
ââ dir000
ââ 000
   ââ 000
â â  âââ 001
    ââ 002
...
   ââ 999
â âââ 001
   ââ 000
â â  âââ 001
...
â â âââ 999
...
âââ 999
â â âââ 000
...
â â âââ 999
...
ââ dir124
âââ 000
...
âââ 999
â â âââ 000
...
        ââ 999

Для их создания можно использовать следующий скрипт:

#!/бин/баш
пусть я = 0
в то время как (( я < 125000 ) ); делать
  пусть а=я/1000
  пусть б = я% 1000
  mkdir -p $(printf "dir%03d/%03d/\n" $a $b){000..999}
  пусть я++
сделано

Даже в этом случае было бы очень очень очень трудно использовать так много каталогов.

Другая проблема заключается в том, что вы можете легко исчерпать иноды в вашей файловой системе: вы можете получить печально известную На устройстве нет свободного места ошибка, в то время как ваша текущая файловая система делает есть место для хранения, но не осталось места в дескрипторе для создания нового файла или каталога. Пожалуйста, проверьте Я свободен колонка в дф -я . вывод команды перед запуском вышеуказанного скрипта.

Так что, опять же, я думаю, что это типичный проблема XY это потребует совершенно другого подхода.

Ответить или комментировать

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