ลองสิ่งนี้:
for file in file{18..31}.txt
มันเป็นที่รู้จักในฐานะ "ลำดับนิพจน์" และเป็นส่วนหนึ่งของคุณลักษณะการขยายรั้งของ Bash มันทำงานได้ใน Bash 3 และ 4
คุณลักษณะการเพิ่มขึ้นนั้นใหม่สำหรับ Bash 4 คุณอาจมี Bash 3.x
ใน Bash 4 คุณสามารถทำได้:
$ for i in {1..6..2}; do echo $i; done
1
3
5
แต่ใน Bash 3 คุณต้องทำสิ่งนี้เพื่อให้ได้ผลลัพธ์เดียวกัน:
$ for ((i=1; i<=6; i+=2)); do echo $i; done
รูปแบบเดียวกันที่เพิ่มขึ้นโดยหนึ่ง:
$ for ((i=1; i<=6; i++)); do echo $i; done
ตัวเลขใด ๆ สามารถเป็นตัวแปรหรือนิพจน์ได้ อย่างไรก็ตามในการแสดงออกตามลำดับตัวเลขจะต้องมีค่าคงที่
นี่คือตัวอย่างการใช้แบบฟอร์มนั้นในไฟล์ของคุณ:
for ((i=18; i<=31; i++))
do
echo "file${i}.txt"
done
คุณสมบัติใหม่ของการแสดงออกต่อเนื่องใน Bash 4 คือความสามารถในการรวมศูนย์นำหน้า สิ่งนี้มีประโยชน์หากคุณต้องการสร้าง (และใช้) ไฟล์หมายเลขที่สามารถเรียงลำดับได้อย่างถูกต้อง
ใน Bash 4:
touch file{001..010}.txt
จะสร้างไฟล์ชื่อ "file001.txt" ถึง "file010.txt" ชื่อของพวกเขาจะเรียงตามลำดับที่คาดหวัง หากไม่มีศูนย์นำหน้า "file10.txt" จะเรียงลำดับก่อน "file1.txt"
เพื่อทำงานกับไฟล์คุณสามารถใช้ไวยากรณ์ศูนย์นำหน้า:
for file in file{001..010}.txt; do echo "$file"; done
ใน Bash 3 หากคุณต้องการเลขศูนย์นำหน้าคุณต้องเพิ่มคุณค่าด้วยตัวคุณเอง:
for i in {1..10}
do
printf -v i '%03d' $i
echo "file${i}.txt"
done
printf
คำสั่งจะย่อหน้าค่าของฉันกับศูนย์ชั้นนำเพื่อให้ความกว้างเป็น 3 ตัวอย่างเช่น ( "4" กลายเป็น "004")
แก้ไข:
รองรับช่องว่างในชื่อไฟล์เป็นเรื่องง่าย:
$ touch "space name "{008..018..3}" more spaces"
$ ls -l sp*
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000008 more spaces
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000011 more spaces
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000014 more spaces
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000017 more spaces
$ for f in "space name "{008..018..3}" more spaces"; do mv "$f" "${f}.txt"; done
$ ls -l sp*
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000008 more spaces.txt
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000011 more spaces.txt
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000014 more spaces.txt
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000017 more spaces.txt
for
ลูปที่อนุญาตให้มีช่องว่างในชื่อไฟล์โดยใช้ xargs ดูเหมือนว่าจะทำงานถ้าคุณไม่มีทุบตี 4 หากคุณมีทุบตี 4 แล้วใช้การขยายรั้งแน่นอน! ดูคำตอบที่เลือก ปลั๊กไร้ยางอายเพื่ออัปเกรดทุบตีเสือดาวหิมะ