Tạo thư mục có tên 0001 thay vì 1 trong vòng lặp bash script


10

Trong tập lệnh bash sau nếu j = 0000, làm thế nào để tôi thay đổi tập lệnh bash sau để tạo các thư mục có tên 0001, 0002, ...? Trên thực tế, nó tạo ra các thư mục có tên 1, 2, 3

for i in *.jpg; do let j+=1 ; mkdir $j ; done

Cảm ơn!

Câu trả lời:


13

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.)


5

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

Điều này chỉ hữu ích cho một lượng thư mục đã biết trước đó sẽ được tạo. Thông thường, khi sử dụng các thư mục được đánh số, bạn đang ở trong một bối cảnh động - có nghĩa là nó sẽ xác định số lượng khi chạy và do đó vẫn cần đệm chuỗi. Phụ thuộc vào trường hợp sử dụng cụ thể, mặc dù.
user98085

@FEichinger Phải! bài chỉnh sửa cho phù hợp.
gniourf_gniourf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.