Score:0

mkdir ในขณะที่ลูปจริงหยุดที่ 406 โฟลเดอร์

ธง ar

ใครช่วยอธิบายได้ไหมว่าทำไมสคริปต์ของฉันหยุดสร้างโฟลเดอร์ที่ 406 โฟลเดอร์ และบอกวิธีที่จะทำให้มันทำงานได้ไหม

#!/bin/bash
rm -rf อนันต์2
ในขณะที่จริง  
ทำ

mkdir อนันต์2
ซีดี ./infinite2
mkdir ไม่มีที่สิ้นสุด1
ซีดี ./infinite1

เสร็จแล้ว

ฉันใช้เวลาสองสามวันในการพยายามคิดออกและไม่พบสาเหตุที่มันไม่ทำงาน

Soren A avatar
mx flag
ดูเหมือนว่าคุณมีความยาวพาธสูงสุดที่ 4096 อักขระ ...
waltinator avatar
it flag
ระบบไฟล์พื้นฐานคืออะไร ตรวจสอบกับ `ภูเขา`
Eli Thrash avatar
ar flag
ฉันจะรับโฟลเดอร์เพิ่มได้อย่างไร เป็นไปได้ไหม
Eli Thrash avatar
ar flag
ระบบไฟล์พื้นฐานจะเป็น /
Eli Thrash avatar
ar flag
ฉันพยายามสร้างโฟลเดอร์อย่างน้อย 125000000 โฟลเดอร์
Eli Thrash avatar
ar flag
`~$ getconf -a | grep PATH_MAX PATH_MAX 4096 _POSIX_PATH_MAX 4096`
terdon avatar
cn flag
โปรด [แก้ไข] คำถามของคุณและให้บริบทแก่เรา คุณจำเป็นต้องสร้างเส้นทางที่มีความลึก 125000000 หรือคุณต้องการเพียงแค่ 125000000 โฟลเดอร์ ฉันหมายความว่า มันจำเป็นต้องเป็น `d1/d2/d3/.../f125000000` ในแผนผังไดเร็กทอรีเดียวหรือคุณจะตกลงกับ `parentFolder/dir1`, `parentFolder/dir2` ... `parentFolder/ dir125000000`? ยิ่งไปกว่านั้นทำไมคุณถึงต้องการสิ่งนี้ หากคุณอธิบายสิ่งที่คุณต้องการทดสอบ/บรรลุจริง เราอาจสามารถให้แนวทางที่ดีกว่าแก่คุณได้
FedKad avatar
cn flag
ตามที่ @terdon ได้แสดงความคิดเห็นไปแล้ว นี่เป็น https://en.wikipedia.org/wiki/XY_problem ทั่วไป ดังนั้นฉันจึงลงคะแนนเพื่อปิดคำถามนี้!
Eli Thrash avatar
ar flag
ฉันแค่ต้องการสร้าง ``` parentFolder/dir1, parentFolder/dir2 ... parentFolder/dir125000000```
terdon avatar
cn flag
@EliThrash โปรดแก้ไขและอธิบายว่าเพราะแม้ว่ามันจะใช้งานได้ แต่นั่นไม่ใช่สิ่งที่สคริปต์ของคุณจะสร้างขึ้น ฟังดูเหมือนคุณต้องการ `mkdir parentFolder/dir{1..125000000}` ซึ่งอาจล้มเหลวเพราะคุณจะส่งค่า MAX_ARG สำหรับอาร์กิวเมนต์สูงสุดในบรรทัดคำสั่ง หรือทำให้เครื่องของคุณพังเนื่องจาก RAM ไม่เพียงพอเมื่อพยายามคำนวณ ที่รั้งการขยายตัว แต่สามารถทำงานเป็นจุดเริ่มต้นเราแค่ต้องรู้ว่าคุณต้องการอะไรจริงๆ
Score:3
ธง cn

ในคำถามเดิมของคุณ คุณพยายามสร้างลำดับชั้นของไฟล์ดังนี้:

.
âââ อนันต์2
â âââ อนันต์1
...
â (ระดับลึกไม่มีที่สิ้นสุด) âââ infinite2

และสคริปต์ของคุณเริ่มมีข้อผิดพลาดเมื่อ "ความลึก" ของคุณถึง "ระดับ" ที่ 406 ไม่มีระบบไฟล์ใดที่สามารถเก็บไดเร็กทอรีย่อยได้หลายระดับตามที่คุณต้องการ

อย่างไรก็ตาม ในความคิดเห็นของคุณ ดูเหมือนว่าคุณต้องการลำดับชั้นของไดเร็กทอรีดังนี้:

.
âââ dir000000001
âââ dir000000002
...
âââ หมายเลข 124999999
âââ 125000000

แม้ว่าอาจเป็นไปได้ที่จะสร้างจำนวนมากขนาดนี้ ระดับเดียว ไดเร็กทอรีย่อยภายใต้ไดเร็กทอรีโดยใช้สคริปต์ดังนี้:

#!/bin/bash
ให้ i=0
ในขณะที่ (( ฉัน < 125,000 )) ; ทำ
  mkdir $(พิมพ์f "dir%06d" $i){000..999}
  ให้ฉัน ++
เสร็จแล้ว

มันจะเป็น มาก มาก (ฉันพูดพอแล้ว มาก?) ไม่มีประสิทธิภาพในการสร้างและใช้งาน ฉัน เคยเป็น สามารถทดสอบสคริปต์นี้ได้โดยสร้างไดเร็กทอรีมากกว่าสองล้านไดเร็กทอรี แต่ 125 ล้านไดเร็กทอรีนั้นมากเกินไป

ทางเลือกหนึ่งที่ดีกว่าคือการสร้างโครงสร้างสามระดับ แต่ละระดับมีไดเร็กทอรีย่อยหนึ่งพันไดเร็กทอรีในลำดับชั้นดังนี้:

.
âââ dir000
€€€€ € 000
€€€€€€ € 000
â ââ âââ 001
â  â â
...
€ 999
â âââ 001
€€€€€€ € 000
â ââ âââ 001
...
â â âââ 999
...
€ 999
â â âââ 000
...
â â âââ 999
...
âââ dir124
â âââ 000
...
€ 999
â â âââ 000
...
        € 999

สามารถใช้สคริปต์ต่อไปนี้เพื่อสร้าง:

#!/bin/bash
ให้ i=0
ในขณะที่ (( ฉัน < 125,000 )) ; ทำ
  ให้ a=i/1000
  ให้ b=i%1000
  mkdir -p $(printf "dir%03d/%03d/\n" $a $b){000..999}
  ให้ฉัน ++
เสร็จแล้ว

แม้ในกรณีนี้ก็ย่อมเป็น มาก มาก ยากที่จะใช้ไดเร็กทอรีมากมาย

อีกปัญหาหนึ่งคือคุณอาจหมดได้ง่ายๆ ไอโหนด ในระบบไฟล์ของคุณ: คุณจะได้รับชื่อที่น่าอับอาย ไม่มีพื้นที่เหลือบนอุปกรณ์ เกิดข้อผิดพลาดในขณะที่ระบบไฟล์ปัจจุบันของคุณ ทำ มีพื้นที่เก็บข้อมูล แต่ไม่มีพื้นที่ว่างเหลือสำหรับสร้างไฟล์หรือไดเร็กทอรีใหม่ กรุณาตรวจสอบ ไอฟรี คอลัมน์ใน df -i . เอาต์พุตคำสั่งก่อนที่จะรันสคริปต์ด้านบน

ดังนั้น อีกครั้ง ฉันคิดว่านี่เป็นเรื่องปกติ ปัญหา XY ซึ่งจะต้องใช้วิธีที่แตกต่างไปจากเดิมอย่างสิ้นเชิง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา