Puncte:0

mkdir în timp ce bucla adevărată se oprește la 406 foldere

drapel ar

Poate cineva să explice de ce scriptul meu nu mai face foldere la 406 foldere și să-mi spună o modalitate de a-l face să funcționeze?

#!/bin/bash
rm -rf infinit2
în timp ce adevărat  
do

mkdir infinit2
cd ./infinit2
mkdir infinit1
cd ./infinit1

Terminat

Am petrecut câteva zile încercând să-mi dau seama și nu am găsit de ce nu funcționează.

Soren A avatar
drapel mx
Se pare că atingeți lungimea maximă a căii pe 4096 de caractere...
waltinator avatar
drapel it
Care este sistemul de fișiere de bază? Verificați cu `mount`.
Eli Thrash avatar
drapel ar
Cum aș putea obține mai multe foldere. Este chiar posibil?
Eli Thrash avatar
drapel ar
Sistemul de fișiere de bază? Ar fi acesta /
Eli Thrash avatar
drapel ar
Am încercat să fac cel puțin 125000000 de foldere
Eli Thrash avatar
drapel ar
`~$ getconf -a | grep PATH_MAX PATH_MAX 4096 _POSIX_PATH_MAX 4096`
terdon avatar
drapel cn
Vă rugăm să [editați] întrebarea dvs. și să ne oferiți un context. Chiar trebuie să creați o cale cu adâncimea de 125000000 sau doriți doar 125000000 de foldere? Adică, chiar trebuie să fie `d1/d2/d3/.../f125000000` într-un singur arbore de directoare sau ai fi de acord cu `parentFolder/dir1`, `parentFolder/dir2` ... `parentFolder/ dir125000000`? Și mai bine, de ce ai nevoie de asta? Dacă explicați ceea ce doriți să testați/realizați de fapt, s-ar putea să vă putem oferi o abordare mai bună pentru a face acest lucru.
FedKad avatar
drapel cn
După cum a comentat deja @terdon, acesta este un https://en.wikipedia.org/wiki/XY_problem tipic, așa că vot pentru a închide această întrebare!
Eli Thrash avatar
drapel ar
Vreau doar să fac ```parentFolder/dir1, parentFolder/dir2 ... parentFolder/dir125000000```
terdon avatar
drapel cn
@EliThrash, atunci vă rugăm să editați și să explicați asta pentru că, chiar dacă ar funcționa, nu asta ar fi creat scriptul dvs. Se pare că doriți doar `mkdir parentFolder/dir{1..125000000}`, care probabil va eșua deoarece veți trece valoarea MAX_ARG pentru argumente maxime în linia de comandă sau veți bloca mașina deoarece rămâne fără RAM încercând să calculeze această expansiune, dar poate funcționa ca punct de plecare.Trebuie doar să știm ce vrei cu adevărat.
Puncte:3
drapel cn

În întrebarea dvs. inițială, încercați să creați o ierarhie de fișiere ca aceasta:

.
âââ infinit2
â  âââ infinit1
...
â (nivel nesfârșit profund) âââ infinit2

iar scriptul tău începe să primească erori atunci când „adâncimea” atinge „nivelul” 406. Nu există un sistem de fișiere cunoscut care să poată conține atât de multe niveluri de subdirectoare cât cele dorite.

Cu toate acestea, în comentariile dvs., se pare că doriți o ierarhie de directoare ca aceasta:

.
âââ dir000000001
âââ dir000000002
...
âââ dir124999999
âââ dir125000000

Deși este posibil să se creeze un număr atât de mare de un singur nivel subdirectoare dintr-un director folosind un script ca acesta:

#!/bin/bash
fie i=0
în timp ce (( i < 125000 )) ; do
  mkdir $(printf "dir%06d" $i){000..999}
  lasă i++
Terminat

ar fi foarte foarte foarte (am spus de destule ori foarte?) ineficientă pentru a le crea și utiliza. eu a fost capabil să testeze acest script prin crearea a peste două milioane de directoare; dar 125 de milioane de directoare sunt mult prea multe.

O alternativă mai bună ar fi crearea unei structuri pe trei niveluri, fiecare nivel deținând o mie de subdirectoare într-o ierarhie ca aceasta:

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

Următorul script poate fi folosit pentru a le crea:

#!/bin/bash
fie i=0
în timp ce (( i < 125000 )) ; do
  fie a=i/1000
  fie b=i%1000
  mkdir -p $(printf "dir%03d/%03d/\n" $a $b){000..999}
  lasă i++
Terminat

Chiar și în acest caz, așa ar fi foarte foarte foarte greu de folosit atât de multe directoare.

O altă problemă este că s-ar putea să rămâneți fără probleme inoduri în sistemul dvs. de fișiere: puteți obține infamul Nu a mai rămas spațiu pe dispozitiv eroare, în timp ce sistemul dvs. de fișiere actual face au spațiu de stocare, dar nu rămâne spațiu inod pentru a crea un nou fișier sau director. Te rog verifică Sunt liber coloana din df -i . ieșirea comenzii, înainte de a rula scriptul de mai sus.

Deci, din nou, cred că acesta este un tipic Problema XY asta ar necesita o abordare complet diferită.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.