bash's * จับคู่ไฟล์ตามลำดับตัวอักษรและตัวเลขหรือไม่


25

ฉันต้องการต่อไฟล์หลายไฟล์เข้าด้วยกันตามลำดับชื่อไฟล์

จะปลอดภัยหรือไม่ที่จะสมมติว่าสิ่งนี้จะให้พวกเขาตามลำดับตัวอักษรและตัวเลข?

cat * 

เช่นคำสั่งเดียวกับที่lsให้

คำตอบ:


26

คำตอบสั้น ๆ : ใช่มันจะ

จากหน้าคนทุบตี :

หลังจากแยกคำยกเว้นว่ามีการตั้งค่าตัวเลือก -f (ดู The Set Builtin) Bash จะสแกนแต่ละคำเพื่อหาอักขระ '*', '?' และ '[' หากหนึ่งในอักขระเหล่านี้ปรากฏขึ้นคำนั้นจะถือเป็นรูปแบบและแทนที่ด้วยรายการที่เรียงลำดับตามตัวอักษรของชื่อไฟล์ที่ตรงกับรูปแบบ


6
โปรดทราบว่า "ตัวอักษร" จะแตกต่างกันไปตามการตั้งค่าภาษา (โดยเฉพาะ$LC_COLLATE)
grawity

4
@grawity จริง แต่มันจะส่งผลในการส่งออกเช่นเดียวlsกับในระบบเดียวกันจะ
BloodPhilia

8

คำตอบสั้น ๆ คือใช่ แต่คุณต้องระวังสิ่งที่คิดว่าลำดับตัวอักษรและตัวเลขควรเป็นเพราะอาจไม่สอดคล้องกับระเบียบธรรมชาติที่คุณมีในใจ

ตัวอย่างเช่นเรียกใช้การทดสอบบางอย่างเกี่ยวกับวิธีการจัดการกรณีบนและล่างเพื่อค้นหาในระบบของคุณเช่นเดียวกับลำดับของตัวเลข

ปัญหาทั่วไปที่ฉันพบในการเรียงลำดับรายการไฟล์ที่ส่งคืนโดย glob คือไฟล์ที่มีหมายเลข ฉันมักจะได้รับไฟล์ที่มีหมายเลขเช่น:

blah_1.txt
blah_2.txt
...
blah_10.txt
blah_11.txt

อย่างไรก็ตามการใช้ glob *จะไม่ส่งคืนพวกเขาตามลำดับนี้ แต่คุณจะได้รับดังนี้:

blah_1.txt
blah_10.txt
blah_11.txt
...
blah_2.txt
blah_20.txt
...

ดังนั้น - เพื่อหลีกเลี่ยงปัญหานี้คุณอาจจะจำเป็นที่จะต้องทำเช่นการจัดการบางอย่างอยู่ในรายชื่อกลับมาของไฟล์หรือไฟล์เปลี่ยนชื่อเพื่อให้ได้เลขหลักเดียวศูนย์นำ (เช่นblah_01.txt, blah_02.txtฯลฯ )

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