คัดลอกไฟล์ที่มีนามสกุลหลาย ๆ ตัว


22

ฉันต้องการคัดลอกไฟล์ที่มีหลายนามสกุลไปยังไดเรกทอรีปลายทางเดียว

ตัวอย่างเช่นฉันสามารถใช้คำสั่งต่อไปนี้เพื่อคัดลอกไฟล์. txtทั้งหมดในไดเรกทอรีทำงานไปยังไดเรกทอรีที่เรียกว่าdestination:

cp -v *.txt destination/

และฉันสามารถใช้สิ่งต่อไปนี้เพื่อคัดลอกไดเรกทอรี. pngทั้งหมดในไดเรกทอรีทำงานไปที่destination:

cp -v *.png destination/

แต่ใช้เวลานานในการพิมพ์คำสั่งเหล่านี้เป็นคำสั่งแยกต่างหาก (แม้จะใช้ประวัติคำสั่ง) ดังนั้นจะมีวิธีการที่ผมสามารถบอกได้ใด ๆcpในการคัดลอกไฟล์ที่มีทั้งรูปแบบ*.txt หรือรูปแบบ*.pngที่จะdestination? จะเป็นการดีที่ฉันต้องการที่จะสามารถระบุมากกว่าสองรูปแบบที่ชอบ - สอนcpการคัดลอกทั้งหมด*.txt หรือ *.png หรือ *.jpgไฟล์ไปdestinationยกตัวอย่างเช่น

ฉันแน่ใจว่าทั้งหมดนี้เป็นไปได้โดยใช้เชลล์สคริปต์ - ฉันใช้bash- แต่มีวิธีใดที่จะทำให้สำเร็จได้ง่ายขึ้นเพียงจากคอนโซลหรือไม่ ฉันจะใช้การขยายรั้งเพื่อทำมันได้หรือไม่?

ฉันรู้ว่ามันเป็นไปได้ที่จะคัดลอกไฟล์ทั้งหมดในไดเรกทอรีการทำงานยกเว้นที่ตรงกับรูปแบบที่ระบุบางอย่างแต่เนื่องจากไดเรกทอรีการทำงานของฉันมีนามสกุลไฟล์มากกว่าที่ฉันไม่ต้องการคัดลอกกว่าที่ฉันทำซึ่งจะเป็นความเจ็บปวด

คุณมีความคิดเกี่ยวกับสิ่งนี้หรือไม่?


10
cp -v *.txt *.png destination/?
iruvar

คำตอบ:


55

การขยายรั้งจะทำให้งานเสร็จ และค้นหาman bashBrace Expansion

cp *.{txt,jpg,png} destination/

แก้ไข:

เพื่อให้เป็นไปตามคำขอของ OP คำสั่งดังกล่าวจึงไม่มีตัวเลือก verbose:

cp -v *.{txt,jpg,png} destination/

2
ฉันสามารถทำสิ่งนี้บน Windows ได้หรือไม่
sergiol

ถ้าฉันทำcp data/images/*.{jpg,jpeg,png,mp4} destination/และmp4ไม่มีไฟล์ฉันได้รับNo such file or directoryข้อผิดพลาดซึ่งทำให้สคริปต์แตก ฉันสามารถทำให้ส่วนขยายหลายรายการรองรับรูปแบบที่ขาดหายไปได้หรือไม่
BradGreens

1
@BradGreens คุณควรโพสต์คำถามใหม่แทนที่จะถามที่นี่ในความคิดเห็น คำถามของคุณอาจมีคำตอบอยู่แล้ว การโพสต์คำถามใหม่ไม่เพียง แต่จะได้รับคำตอบจากคุณเท่านั้น แต่ผู้อื่นที่ต้องการความช่วยเหลือแบบเดียวกันจะสามารถค้นหาได้
Timothy Martin

0
for filename in /Photos/directory/* ; do
    filenameWithoutPath="${filename##*/}"
    first_num="${filenameWithoutPath%%.*}"
    last_num="${filenameWithoutPath##*.}"
    cp $filename /Photos/directory/$first_num-$last_num.jpg
done

ทำงานอยู่!

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