คุณสามารถจัดเรียงรายการlsตามชื่อได้หรือไม่?
คุณสามารถจัดเรียงรายการlsตามชื่อได้หรือไม่?
คำตอบ:
ls ของฉันเรียงตามชื่อโดยค่าเริ่มต้น คุณเห็นอะไรบ้าง?
man ls
รัฐ:
List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.
:
ls
ไม่เรียงลำดับหาก-c1
ระบุ: มีวิธีทำให้ทำได้หรือไม่? ( --sort=name
ดูเหมือนจะใช้ไม่ได้)
ls -la
ฉันเห็น: .bashrc - can - .config - Downloads - .local - tmp
เรียงลำดับเป็นชื่อจะเป็น:.bashrc - .config - .local - Downloads - can - tmp
หาสิ่งที่ง่ายคุณสามารถรวมคำสั่ง lsกับการจัดเรียง สำหรับรายชื่อไฟล์เท่านั้น:
ls -1 | ประเภท
ในการเรียงลำดับย้อนกลับ:
ls -1 | เรียงลำดับ -r
ls | sort -n
1.1.1; 1.1.2; 1.1.3; 2.10.1; 2.10.15; 2.10.2; 2.10.20; 2.10.21; 2.1.1; 2.1.10; 2.1.15; 2.1.2; 2.1.3; 2.1.4; 10.1.1; 10.1.2; 10.1.3; 11.0.1; 11.0.2; 11.0.20; 11.0.21; 11.0.22; ที่คุณสามารถดู2.10.15 ก่อน 2.10.2
ls -1r
ได้
ls
จากcoreutils
ดำเนินการจัดเรียงที่ทราบตำแหน่งที่ตั้งตามค่าเริ่มต้นดังนั้นจึงอาจให้ผลลัพธ์ที่น่าแปลกใจในบางกรณี (เช่น%foo
จะเรียงลำดับระหว่างbar
และquux
ในLANG=en_US
) หากคุณต้องการจัดเรียง ASCIIbetical ให้ใช้
LANG=C ls
LANG
ความไม่เหมาะสมของพฤติกรรมการจัดเรียงโพสต์นี้ช่วยฉันได้มาก!
?
สำหรับอักขระที่ไม่ใช่ ascii ทุกตัวเมื่อเอาต์พุตเป็นเทอร์มินัล (คุณลักษณะที่ไม่ดีจาก ls จะตรวจสอบว่าเอาต์พุตไปยังเทอร์มินัลทำงานเมื่อท่อ) คุณสามารถ "แก้ไข" สิ่งนี้ด้วย piping to cat ใช้C.UTF-8
โลแคล (หากระบบของคุณรองรับ) และ / หรือใช้-b
แฟล็ก ยิ่งไปกว่านั้นอย่าใช้ls
เลยดีกว่าใช้ '
ls
จัดเรียงยัติภังค์ก่อนขีดคั่น
ความสวยงามของเครื่องมือ * nix คือคุณสามารถรวมเข้าด้วยกัน:
ls -l | sort -k9,9
ผลลัพธ์ของls -l
จะมีลักษณะเช่นนี้
-rw-rw-r-- 1 luckydonald luckydonald 532 Feb 21 2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt
ดังนั้นเมื่อ9,9
คุณจัดเรียงคอลัมน์9
ไปยังคอลัมน์9
เป็นชื่อไฟล์ คุณต้องระบุตำแหน่งที่จะหยุดซึ่งเป็นคอลัมน์เดียวกันในกรณีนี้ คอลัมน์เริ่มต้นด้วย1
.
นอกจากนี้หากคุณต้องการละเว้นตัวพิมพ์ใหญ่ / เล็กให้เพิ่ม--ignore-case
คำสั่ง sort
-k9,9
หมายถึง?
9
ผลลัพธ์9
ปกติls
จะมีลักษณะดังนี้drwx------ 8 999 user 4.0K Feb 5 2017 file.txt
ดังนั้นคอลัมน์ 9 จึงเป็นชื่อไฟล์ หากคุณต้องการละเว้นกรณีนี้ให้ใช้--ignore-case
ในการจัดเรียง
ข้อสังเกต: "a" มาหลังจาก "Z":
$ touch A.txt aa.txt Z.txt
$ ls
ก. txt Z.txt aa.txt
normal
แก้ปัญหาที่นี่
ไฟล์ที่มีความแตกต่างกันโดยสตริงตัวเลขเท่านั้นที่สามารถจัดเรียงบนตัวเลขนี้ได้โดยมีเงื่อนไขว่าจะนำหน้าด้วยตัวคั่น
ในกรณีนี้สามารถใช้ไวยากรณ์ต่อไปนี้:
ls -x1 file | sort -t'<char>' -n -k2
ตัวอย่าง:
ls -1 TRA*log | sort -t'_' -n -k2
TRACE_1.log
TRACE_2.log
TRACE_3.log
TRACE_4.log
TRACE_5.log
TRACE_6.log
TRACE_7.log
TRACE_8.log
TRACE_9.log
TRACE_10.log
จากหน้าคน (สำหรับ bash ls):
จัดเรียงรายการตามตัวอักษรหากไม่มี -cftuSUX หรือ --sort
which ls
จะประสบความสำเร็จแม้ว่า bash จะมี builtin ls แต่ทำbuiltin ls
ใน bash และได้รับข้อผิดพลาด
which
ส่งกลับเส้นทางเสมอ ใช้type ls
เพื่อพิจารณาว่าเชลล์คิดว่าls
คืออะไร (ในตัว, ฟังก์ชัน, ปฏิบัติการได้)
ls
ประโยชน์ควรเป็นไปตามมาตรฐาน IEEE Std 1,003.1-2,001 ( POSIX.1
) ซึ่งสหรัฐฯ:
22027: จะเรียงลำดับไดเร็กทอรีและตัวถูกดำเนินการที่ไม่ใช่ไดเร็กทอรีแยกกันตามลำดับการเรียงในโลแคลปัจจุบัน
26027: โดยค่าเริ่มต้นรูปแบบจะไม่ระบุ แต่ผลลัพธ์จะถูกเรียงลำดับตามตัวอักษรตามชื่อสัญลักษณ์:
- ชื่อไลบรารีหรืออ็อบเจ็กต์หากระบุ −A
- ชื่อสัญลักษณ์
- ประเภทสัญลักษณ์
- มูลค่าของสัญลักษณ์
- ขนาดที่เกี่ยวข้องกับสัญลักษณ์หากมี
ตรวจสอบ.bashrc
ไฟล์ของคุณสำหรับนามแฝง
alias
เพื่อตรวจสอบนามแฝงปัจจุบันทั้งหมด
ls -X ทำงานเพื่อจุดประสงค์นั้นในกรณีที่คุณมีนามแฝง ls เป็นค่าเริ่มต้นที่มีประโยชน์มากขึ้น
In Debian Jessie, this works nice:
ls -lah --group-directories-first
# l=use a long listing format
# a=do not ignore entries starting with .
# h=human readable
# --group-directories-first=(obvious)
# Note: add -r for reverse alpha
# You might consider using lh by appending to ~/.bashrc as the alias:
~$ echo "alias lh='ls -lah --group-directories-first'" >>~/.bashrc
# -- restart your terminal before using lh command --