ในคำถามเดิมของคุณ คุณพยายามสร้างลำดับชั้นของไฟล์ดังนี้:
.
âââ อนันต์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 ซึ่งจะต้องใช้วิธีที่แตกต่างไปจากเดิมอย่างสิ้นเชิง