Câu trả lời:
Tập lệnh hiện tại của bạn chỉ sử dụng một giá trị thập phân - điều này rõ ràng chuyển thành giá trị mà không có các số 0 đứng đầu.
Bạn sẽ phải đệm chuỗi có độ dài 4 ký tự, với các số 0 đứng đầu. Bạn làm điều này bằng cách sử dụng backticks ``để có được kết quả của lệnh gọi printf printf %04d $j.
Do đó, bạn nên có lệnh đầy đủ:
for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done
Nguồn: StackOverflow: bash - Đệm số không trong một chuỗi
(Rõ ràng cũng thấy các câu trả lời tiếp theo cho câu hỏi đó, nếu bạn muốn một giải pháp sâu hơn, nhưng điều này chắc chắn hoạt động hoàn hảo cho trường hợp sử dụng này.)
Sử dụng bash, tùy chọn tốt nhất của bạn là:
mkdir {0001..0666}
để tạo thư mục có tên 0001đến 0666(với phần đệm bằng 0).
Nếu bạn muốn thư mục tên prefix0001suffix, prefix0002suffix... sau đó:
mkdir prefix{0001..0666}suffix
sẽ làm.
Nếu bạn chỉ muốn tên thư mục số lẻ
mkdir {0001..0666..2}
và v.v ... Xem Mở rộng Brace trong bashhướng dẫn tham khảo .
Như FEichinger chỉ ra, bạn cần biết trước số lượng thư mục. Nếu bạn muốn một giải pháp gần với bạn, nhưng thực sự an toàn và sử dụng thành ngữ bash hiện đại hơn:
for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done