ในสคริปต์ทุบตีต่อไปนี้ถ้า j = 0000 ฉันจะเปลี่ยนสคริปต์ทุบตีต่อไปนี้เพื่อทำให้ dirs ชื่อ 0001, 0002, ... ได้อย่างไร? จริงๆแล้วมันทำให้ dirs ชื่อ 1, 2, 3
for i in *.jpg; do let j+=1 ; mkdir $j ; done
ขอบคุณ!
ในสคริปต์ทุบตีต่อไปนี้ถ้า j = 0000 ฉันจะเปลี่ยนสคริปต์ทุบตีต่อไปนี้เพื่อทำให้ dirs ชื่อ 0001, 0002, ... ได้อย่างไร? จริงๆแล้วมันทำให้ dirs ชื่อ 1, 2, 3
for i in *.jpg; do let j+=1 ; mkdir $j ; done
ขอบคุณ!
คำตอบ:
สคริปต์ปัจจุบันของคุณใช้เฉพาะค่าทศนิยม - สิ่งนี้แปลได้อย่างชัดเจนว่าไม่มีค่าเลขศูนย์นำหน้า
คุณจะต้องรองสตริงความยาว 4 ตัวอักษรด้วยศูนย์นำ คุณทำเช่นนี้โดยใช้ backticks ที่จะได้รับผลจากการโทร``
printfprintf %04d $j
ดังนั้นคุณควรมีคำสั่งทั้งหมด:
for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done
แหล่งที่มา: StackOverflow: bash - การเติมศูนย์ในสตริง
(เห็นได้ชัดว่ายังเห็นคำตอบเพิ่มเติมสำหรับคำถามนั้นหากคุณต้องการวิธีการแก้ปัญหาในเชิงลึกยิ่งขึ้น แต่วิธีนี้จะทำงานได้อย่างสมบูรณ์แบบสำหรับกรณีการใช้งานนี้)
ใช้ bash ตัวเลือกที่ดีที่สุดของคุณคือ:
mkdir {0001..0666}
เพื่อสร้าง dirs ที่มีชื่อ0001
ถึง0666
(โดยไม่มีการเติมเต็มศูนย์)
หากคุณต้องการไดเรกทอรีที่มีชื่อprefix0001suffix
, prefix0002suffix
... แล้ว:
mkdir prefix{0001..0666}suffix
จะทำ.
ถ้าคุณต้องการชื่อไดเรกทอรีเลขคี่เท่านั้น
mkdir {0001..0666..2}
และอื่น ๆ ... ดูการขยายตัวรั้งในbash
คู่มืออ้างอิง
เมื่อ FEichinger ชี้ให้เห็นคุณจำเป็นต้องทราบจำนวนไดเรกทอรีล่วงหน้า หากคุณต้องการโซลูชันที่ใกล้เคียงกับคุณ แต่ปลอดภัยและใช้ bash idiom ที่ทันสมัยกว่า:
for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done