บอก `ls 'เพื่อจัดเรียงตามรหัส ASCII ปกติไม่ใช่“ อย่างชาญฉลาด”


13

ฉันมีไฟล์คู่และlsเรียงลำดับพวกเขาเช่นนี้:

a
_b
c

แต่ฉันต้องการที่จะมี

_b
a
c

ฉันจะทำสิ่งนั้นได้อย่างไร


2
ฉันอาจถามว่าทำไม
RolandiXor

2
ฉันใช้เครื่องหมายขีดล่างเพื่อแสดงถึงไดเรกทอรีพิเศษที่จำเป็นต้องขึ้นไปด้านบน ในโฟลเดอร์โปรเจ็กต์ของฉันฉันมี proj_a, proj_b และ _old_projects มันไม่มีประโยชน์หากโฟลเดอร์นี้อยู่ในโครงการ o
Martin Ueding

คำตอบ:


9

ในฐานะคำสั่งใช้ครั้งเดียวคุณสามารถทำสิ่งนี้:

LC_COLLATE=C ls

หรือคุณสามารถเพิ่มexport LC_COLLATE="C"ใน. bashrc ของคุณเพื่อให้ถาวร (อาจมีการเรียงลำดับผลลัพธ์ที่ไม่คาดคิดที่อื่น)

ข้อมูลเพิ่มเติมเกี่ยวกับฟอรั่มอูบุนตู


1
ฉันเดาว่าฉันจะใช้นามแฝงกับมันเพื่อที่ว่ามันจะไม่มีผลข้างเคียง
Martin Ueding

มันไม่ได้ผลสำหรับฉัน ฉันได้รับสิ่งนี้ -> paste.pocoo.org/show/403333 (มันเป็นภาษาเยอรมัน แต่ไม่ควรมีปัญหา)
dAnjou

2
@dAnjou LC_COLLATE=Cls ตั้งค่าลำดับการเรียง POSIX แบบดั้งเดิมซึ่งเป็นโดย ASCII ที่ตัวพิมพ์ใหญ่มาก่อนเครื่องหมายขีดล่าง หากต้องการขีดเส้นใต้ก่อนตัวพิมพ์ใหญ่คุณจะต้องอยู่ภายใต้ฝากระโปรงหน้าและสร้างคำจำกัดความของตำแหน่งที่ตั้งแบบกำหนดเองภายใต้ / usr / share / i18n / locales
มิสเตอร์เบ็น

2
สิ่งนี้อาจใช้งานได้ในอดีต แต่ไม่ได้ทำงานบน Ubuntu 12.04
Mikel

1
ตั้งแต่ Ubuntu 14.04 LC_COLLATE=C lsไม่ทำงาน แต่LC_ALL=C lsทำไม่ได้
jwodder

6

ในกรณีที่ไม่มีวิธีการทำเช่นนี้คุณสามารถใช้การแทนที่แบบง่าย ๆ สำหรับsort:

#!/usr/bin/env python

import sys

for i in sorted(sys.stdin):
    sys.stdout.write(i)

ตัวอย่างเช่นบันทึกที่/bin/pysortและทำให้สามารถเรียกใช้งานได้ ( sudo cp whatever.py /bin/pysortและsudo chmod a+x /bin/pysort) และเรียกใช้เป็นls | pysort:

stefano@lenovo:~/t$ ls | pysort
_b
a
c

1
ฉันอาจจะใส่ใน~/binแต่ทางเลือกที่ดี มันน่าจะดีกว่าถ้าใช้ globbing ภายในไพ ธ อนเนื่องจากเอาท์พุตของ ls อาจจะแปลกถ้าชื่อไฟล์มีบรรทัดใหม่
Martin Ueding

1

จะls | sortไม่ทำสิ่งที่คุณต้องการ?


1
ไม่เลยมันจัดว่าเป็น "a _b c"
Stefano Palazzo

1
ไม่! และการเรียงลำดับยังไม่มีตัวเลือกสำหรับ :-) นี้
Rinzwind

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