คัดลอกช่วงของไฟล์ในบรรทัดคำสั่ง (ZSH / BASH)


13

ฉันมีรายการไฟล์ที่มีตัวเลขเรียงติดกันเป็นคำต่อท้าย ฉันต้องการคัดลอกเฉพาะไฟล์เหล่านี้เท่านั้น ฉันจะระบุช่วงเป็นส่วนหนึ่งของคำสั่ง cp ได้อย่างไร

$ls
P1080272.JPG* P1080273.JPG* P1080274.JPG* P1080275.JPG* P1080276.JPG* P1080277.JPG*
P1080278.JPG* P1080279.JPG* P1080280.JPG* P1080281.JPG* P1080282.JPG* P1080283.JPG*

ฉันต้องการคัดลอกไฟล์จาก P1080275.JPG ไปยัง P1080283.JPG ด้วยสิ่งที่คล้ายกับ:

$cp P10802[75-83].JPG ~/Images/.

มีวิธีทำเช่นนี้หรือไม่?

คำตอบ:



9

วิธีวนซ้ำในช่วงทุบตี:

for x in {0..10}; do echo $x; done

ใช้แบบเดียวกันในกรณีของคุณ:

for x in {272..283}; do cp P1080$x.JPG ~/Images; done

ใช้งานได้ แต่ฉันชอบ @glenn jackman คำตอบที่ดีกว่าเพราะมันไม่ได้เรียกใช้การเขียนโปรแกรมสร้าง
Amjith

4

zsh มีตัวเลือก extendedglob มี globbing (จับคู่รูปแบบ) ผู้ประกอบการ

setopt extendedglob
echo P10802<75-83>.JPG

จะจับคู่ชื่อไฟล์ในไดเรกทอรีปัจจุบันที่ตรงกับรูปแบบนั้น (ระวังว่า P1080275.JPG ตรงกับ แต่ P108020000000075.JPG จะเป็นเช่นนั้น)

อีกด้านหนึ่งตัวดำเนินการขยายสตริง {x ... y} (รองรับโดย zsh และรุ่นล่าสุดของ bash และ ksh93) ขยายไปยังสตริงจาก x ถึง y โดยไม่คำนึงถึงไฟล์ที่มีอยู่ในไดเรกทอรีปัจจุบัน

cp P10802<75-83>.JPG ~there

จะคัดลอกไฟล์ที่ตรงกันดังนั้นจะ

cp P10802{75..83}.JPG ~there

แต่คุณจะได้รับข้อผิดพลาดหากไม่มี P1080281.JPG อยู่


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.