Điểm:0

mkdir trong khi vòng lặp thực dừng ở 406 thư mục

lá cờ ar

Ai đó có thể giải thích tại sao tập lệnh của tôi ngừng tạo thư mục ở thư mục 406 và cho tôi biết cách để tập lệnh hoạt động không?

#!/bin/bash
rm -rf vô hạn2
trong khi đúng  
làm

mkdir vô hạn2
cd ./infinite2
mkdir vô hạn1
cd ./infinite1

xong

Tôi đã dành vài ngày để cố gắng tìm ra điều này và không thể tìm ra lý do tại sao nó không hoạt động.

Soren A avatar
lá cờ mx
Có vẻ như bạn đã đạt đến độ dài đường dẫn tối đa trên 4096 ký tự ...
waltinator avatar
lá cờ it
Hệ thống tập tin cơ bản là gì? Kiểm tra với `mount`.
Eli Thrash avatar
lá cờ ar
Làm thế nào tôi có thể nhận được nhiều thư mục hơn. Nó thậm chí có thể?
Eli Thrash avatar
lá cờ ar
Hệ thống tệp cơ bản? Đó có phải là /
Eli Thrash avatar
lá cờ ar
Tôi đã cố gắng tạo ít nhất 125000000 thư mục
Eli Thrash avatar
lá cờ ar
`~$ getconf -a | grep PATH_MAX ĐƯỜNG_MAX 4096 _POSIX_PATH_MAX 4096`
terdon avatar
lá cờ cn
Vui lòng [chỉnh sửa] câu hỏi của bạn và cung cấp cho chúng tôi một số ngữ cảnh. Bạn có thực sự cần tạo một đường dẫn sâu 125000000 hay bạn chỉ muốn 125000000 thư mục? Ý tôi là, nó có thực sự cần phải là `d1/d2/d3/.../f125000000` trong một cây thư mục hay bạn sẽ ổn với `parentFolder/dir1`, `parentFolder/dir2` ... `parentFolder/ dir125000000`? Thậm chí tốt hơn, tại sao bạn cần điều này? Nếu bạn giải thích những gì bạn muốn thực sự kiểm tra/đạt được, chúng tôi có thể cung cấp cho bạn một cách tiếp cận tốt hơn để thực hiện điều đó.
FedKad avatar
lá cờ cn
Như @terdon đã nhận xét, đây là https://en.wikipedia.org/wiki/XY_problem điển hình, vì vậy tôi bỏ phiếu để đóng câu hỏi này!
Eli Thrash avatar
lá cờ ar
Tôi chỉ muốn tạo ```parentFolder/dir1, parentFolder/dir2 ... parentFolder/dir125000000```
terdon avatar
lá cờ cn
@EliThrash thì vui lòng chỉnh sửa và giải thích điều đó bởi vì, ngay cả khi nó hoạt động, đó không phải là thứ mà tập lệnh của bạn sẽ tạo ra. Có vẻ như bạn chỉ muốn `mkdir parentFolder/dir{1..125000000}`, điều này có thể sẽ không thành công vì bạn sẽ chuyển giá trị MAX_ARG cho các đối số tối đa trong dòng lệnh hoặc khiến máy của bạn gặp sự cố khi hết RAM khi cố gắng tính toán mở rộng cú đúp đó, nhưng có thể hoạt động như một điểm khởi đầu.Chúng tôi chỉ cần biết những gì bạn thực sự muốn.
Điểm:3
lá cờ cn

Trong câu hỏi ban đầu của bạn, bạn cố gắng tạo một hệ thống phân cấp tệp như thế này:

.
âââ vô hạn2
â âââ vô hạn1
...
â (cấp độ sâu vô tận) âââ vô hạn2

và tập lệnh của bạn bắt đầu gặp lỗi khi "độ sâu" của bạn đạt đến "mức" thứ 406. Không có hệ thống tệp nào được biết đến có thể chứa nhiều cấp thư mục con như bạn muốn.

Tuy nhiên, trong nhận xét của bạn, có vẻ như bạn muốn có một hệ thống phân cấp thư mục như thế này:

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

Mặc dù có thể tạo ra một số lượng lớn như vậy Cấp một các thư mục con trong một thư mục bằng cách sử dụng tập lệnh như thế này:

#!/bin/bash
hãy để tôi = 0
trong khi (( i < 125000 )); làm
  mkdir $(printf "dir%06d" $i){000..999}
  để tôi ++
xong

nó sẽ là rất rất rất (tôi đã nói đủ lần chưa rất?) không hiệu quả để tạo và sử dụng chúng. Tôi có thể kiểm tra tập lệnh này bằng cách tạo hơn hai triệu thư mục; nhưng 125 triệu thư mục là quá nhiều.

Một giải pháp thay thế tốt hơn là tạo cấu trúc ba cấp, mỗi cấp chứa một nghìn thư mục con trong một hệ thống phân cấp như sau:

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

Tập lệnh sau có thể được sử dụng để tạo những thứ này:

#!/bin/bash
hãy để tôi = 0
trong khi (( i < 125000 )); làm
  đặt a=i/1000
  đặt b=i%1000
  mkdir -p $(printf "dir%03d/%03d/\n" $a $b){000..999}
  để tôi ++
xong

Ngay cả trong trường hợp này, nó sẽ là rất rất rất khó sử dụng rất nhiều thư mục.

Một vấn đề khác là bạn có thể dễ dàng hết nút trong hệ thống tệp của bạn: Bạn có thể nhận được tệp khét tiếng không còn chỗ trống trên thiết bị lỗi, trong khi hệ thống tệp hiện tại của bạn làm có dung lượng lưu trữ, nhưng không còn dung lượng inode để tạo tệp hoặc thư mục mới. Vui lòng kiểm tra miễn phí cột trong df -i . đầu ra lệnh, trước khi chạy tập lệnh trên.

Vì vậy, một lần nữa, tôi nghĩ rằng đây là một điển hình vấn đề XY điều đó sẽ đòi hỏi một cách tiếp cận hoàn toàn khác.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.