จะเรียงลำดับผลลัพธ์ของ `ls 'ได้อย่างไร


14

เป็นไปได้ไหมที่จะดูผลลัพธ์นี้เรียงลำดับด้วย titlepage_1.pdf ก่อน titlepage_19.pdf?

$ ls
allTitlepage.pdf         titlepage_12.pdf  titlepage_19.tex  titlepage_26.pdf  titlepage_32.tex  titlepage_4.tex
allTitlepage.tex         titlepage_12.tex  titlepage_1.pdf   titlepage_26.tex  titlepage_33.pdf  titlepage_5.pdf
assignment.pdf           titlepage_13.pdf  titlepage_1.tex   titlepage_27.pdf  titlepage_34.pdf  titlepage_5.tex
assignment.tex           titlepage_13.tex  titlepage_20.pdf  titlepage_27.tex  titlepage_34.tex  titlepage_6.pdf
graphicsAssignment2.pdf  titlepage_14.pdf  titlepage_20.tex  titlepage_28.pdf  titlepage_35.pdf  titlepage_6.tex
graphicsAssignment2.tex  titlepage_14.tex  titlepage_21.pdf  titlepage_28.tex  titlepage_35.tex  titlepage_7.pdf
README.md                titlepage_15.pdf  titlepage_21.tex  titlepage_29.pdf  titlepage_36.pdf  titlepage_7.tex
thesisTitlepage.pdf      titlepage_15.tex  titlepage_22.pdf  titlepage_29.tex  titlepage_36.tex  titlepage_8.pdf
thesisTitlepage.tex      titlepage_16.pdf  titlepage_22.tex  titlepage_2.pdf   titlepage_37.pdf  titlepage_8.tex
titlepage_0.pdf          titlepage_16.tex  titlepage_23.pdf  titlepage_2.tex   titlepage_37.tex  titlepage_9.pdf
titlepage_0.tex          titlepage_17.pdf  titlepage_23.tex  titlepage_30.pdf  titlepage_38.pdf  titlepage_9.tex
titlepage_10.pdf         titlepage_17.tex  titlepage_24.pdf  titlepage_30.tex  titlepage_38.tex  titlepage_one.pdf
titlepage_10.tex         titlepage_18.pdf  titlepage_24.tex  titlepage_31.pdf  titlepage_3.pdf   titlepage_one.tex
titlepage_11.pdf         titlepage_18.tex  titlepage_25.pdf  titlepage_31.tex  titlepage_3.tex   titlepage_two.tex
titlepage_11.tex         titlepage_19.pdf  titlepage_25.tex  titlepage_32.pdf  titlepage_4.pdf

3
ชื่อควรมีความเฉพาะเจาะจงมากขึ้นเนื่องจากดูเหมือนซ้ำกัน (ซึ่งอาจเป็นต่อไป)
Peter Mortensen

คำตอบ:


31

ใช้สวิตช์ -v [การเรียงลำดับตามธรรมชาติของหมายเลข (เวอร์ชัน) ภายในข้อความ]

ls -v

หากคุณต้องการให้คอลัมน์เดียวใช้ ls -1v
Vijay

13

ผลลัพธ์จะถูกจัดเรียง ตามlsmanpage:

เรียงลำดับรายการตามตัวอักษรหากไม่มีการระบุ -cftuvSUX หรือ --sort

แต่ถ้าคุณต้องการที่จะไปเพิ่มเติมคุณมีอย่างน้อยสองตัวเลือก:

ตัวเลือก 1 - lsสวิตช์เรียงลำดับ

man lsบอกคุณเกี่ยวกับสวิตช์จำนวนหนึ่งที่คุณสามารถใช้ในการเรียงลำดับโดยเฉพาะls man pageพูดว่า:

ไม่มี (-U), ขนาด (-S), เวลา (-t), เวอร์ชัน (-v), ส่วนขยาย (-X)

ในกรณีของคุณคุณต้องการเรียงลำดับ "รุ่น" (-v) อย่างไรก็ตามระวังเนื่องจากสิ่งนี้จะเรียงลำดับสิ่งที่มีblahblah-X.Y.Z-Aข้อตกลงซึ่งอาจไม่ใช่สิ่งที่คุณต้องการทั้งหมด ดูเพิ่มเติมคำอธิบาย GNU ของรุ่นจัดเรียง

ตัวเลือก 2 - ไพพ์ไปยังการเรียงลำดับคำสั่ง

คุณสามารถใช้ไพพ์|เพื่อส่งเอาต์พุตไปยังคำสั่งอื่นตัวอย่างเช่นคำสั่ง sortที่คุณสามารถใช้เพื่อเรียงลำดับด้วยวิธีอื่น ๆ ได้หลายวิธีls -1 | sort -nซึ่งมีประโยชน์หากคุณมีหมายเลขไฟล์ -1สวิทช์เพื่อให้แน่ใจว่าการส่งออกเป็นหนึ่งบรรทัดต่อไฟล์

อย่างเท่าเทียมกันคุณสามารถจัดการออกไปช่วยเหลือด้วยการเรียงลำดับโดยใช้สิ่งที่ต้องการหรือsedawk

มีวิธีมากมายในการตอบคำถามประเภทนี้ คุณอาจพบว่าการสอน linux shell มีประโยชน์

* (ดูสิ่งที่ฉันทำที่นั่น? :-p)


6

ดังที่ได้กล่าวไว้แล้วในความคิดเห็นเอาต์พุตถูกเรียงลำดับแล้ว แต่ตามตัวอักษรไม่ใช่ตัวเลข คุณอาจต้องการไพพ์เอาต์พุตlsผ่านsortซึ่งมีสวิตช์เพื่อเรียงลำดับตามตัวเลขภายในสตริง:

ls | sort --version-sort

จากmanpage :

-V, --version-sort
         natural sort of (version) numbers within text

ข้อเสีย:เมื่อเราออกlsมันจะส่งออกไฟล์ในตารางที่มีคอลัมน์มากพอ ๆ กับหน้าจอปัจจุบัน (เหมือนกับที่คุณแสดงในโพสต์) แต่เมื่อlsสังเกตว่าเอาท์พุทของมันถูกเปลี่ยนเส้นทางไปยังไฟล์หรือไปป์ (ในls | sort) แล้วlsพิมพ์ไฟล์ในหนึ่งคอลัมน์เพราะมันจะถือว่าเอาท์พุทจะถูกประมวลผลทีละบรรทัด (aka ไฟล์โดยไฟล์) โดยโปรแกรมอื่น (เช่นsort) ดังนั้นผลลัพธ์ของls | sort -Vจะอยู่ในหนึ่งคอลัมน์แทนที่จะเป็นในตารางที่มีหลายคอลัมน์ ดูคำตอบที่เรียบง่าย แต่สมบูรณ์แบบของ@vijayสำหรับวิธีหลีกเลี่ยงสิ่งนั้น


1
คุณสามารถส่งออกไปยังcolumn
Concon David

0

ls -l : แสดงไฟล์ของไดเรกทอรีในแนวตั้ง แต่ไม่เรียงตามลำดับที่ต้องการ

ls -l | sort -k 3: -k 3จะเรียงลำดับผลลัพธ์ของคำสั่งก่อนหน้าโดยคอลัมน์ที่ 3

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