โดยค่าเริ่มต้นคำสั่ง ls จะเรียงลำดับตามชื่อไฟล์ แต่ฉันต้องการให้ไดเรกทอรีปรากฏก่อนประเภทไฟล์อื่น ฉันอาจต้องการเรียงไฟล์ตามนามสกุลเช่นวิธีที่ Windows explorer จัดเรียงตามคอลัมน์ชนิด มีวิธีการทำสิ่งที่คล้ายกับ ls หรือไม่?
โดยค่าเริ่มต้นคำสั่ง ls จะเรียงลำดับตามชื่อไฟล์ แต่ฉันต้องการให้ไดเรกทอรีปรากฏก่อนประเภทไฟล์อื่น ฉันอาจต้องการเรียงไฟล์ตามนามสกุลเช่นวิธีที่ Windows explorer จัดเรียงตามคอลัมน์ชนิด มีวิธีการทำสิ่งที่คล้ายกับ ls หรือไม่?
คำตอบ:
ฉันคิดว่าคำตอบที่สมบูรณ์คือการรวมกันของข้างต้น
-X (later --sort=extension)
ได้รับการสนับสนุนใน Linux ตั้งแต่ FC3 เป็นอย่างน้อยและจะเรียงลำดับตามส่วนขยาย --group-directories-first
ได้รับการเพิ่มเมื่อเร็ว ๆ นี้ (อาจประมาณ FC8?) อย่างไรก็ตามการรวมสองสิ่งนี้เข้ากันไม่ได้ (อย่างน้อยใน FC8)
ปัญหาหลักดูเหมือนว่าจะมีการใช้คีย์การเรียงลำดับหลักเอกพจน์ ดูการสนทนารายชื่อผู้รับจดหมายนี้เพื่อรับข้อมูลเชิงลึก
-X / --sort=extension
กับ--group-directories-first
และสิ่งอื่น ๆ ที่ฉันได้ลองใน distros Linux ที่ทันสมัย OP อ้างถึง Fedora Core 8 (เปิดตัวในปี 2007) ดังนั้นโอกาสที่จะเกิดปัญหาดังกล่าวนั้นเกิดขึ้นในอดีตอันไกลโพ้น
บน Linux
$ ls --group-directories-first
( man ls
คือเพื่อนของคุณ!)
gls --group-directories-first
บน Mac ถ้าคุณติดตั้งGNU Core utils
บนโฮมเบียน
-X เป็นตัวเลือกที่คุณกำลังมองหา:
ls -lX
ในทุบตีนี้จะทำงาน:
$ ls | rev | sort | rev
จากman rev
:
The rev utility copies the specified files to the standard output,
reversing the order of characters in every line. If no files are speci-
fied, the standard input is read.
ดังนั้น 1. ls ให้เอาต์พุตโดยมีแฟล็กใด ๆ ที่คุณต้องการ 2. แต่ละบรรทัดกลับด้าน 3. จากนั้นพวกเขาเรียงลำดับ 4. และกลับรายการอีกครั้ง 5. เช่นนี้:
หรือมากกว่านั้นตามด้านล่าง ตัวอย่างเช่นไฟล์เหล่านี้เรียงลำดับตามตัวอักษรตัวสุดท้ายจากนั้นเรียงลำดับถัดไปเป็นต้นไฟล์. rtf ทั้งหมดจะแสดงรายการร่วมกันหลังจากไฟล์. ssave และไฟล์อื่น ๆ ที่ไม่มีนามสกุลลงท้ายด้วย 'e' จากนั้นมาไฟล์. png และอื่น ๆ สิ่งนี้จะทำงานกับ ls -l ด้วยเช่นกันเพราะส่วนขยายเป็นสิ่งสุดท้ายในบรรทัด (ยกเว้นถ้าคุณมีบรรทัดเช่น "tmp @ -> / home / jones / tmp" ซึ่งลิงก์จะตามด้วยเป้าหมาย)
$ ls | รอบ | เรียงลำดับ | รอบ cslu1 ls.mp2 ls.mp3 ls.mp4 trees_110214-15 กทท. CSLU แบบฟอร์มมอบฉันทะ finannbyid toannbyid 101209ssi.txt.save to_annotate_size Matas เวลาโดยสัปดาห์ integration2.rtf cyp3.rtf data-dir-scan.perl.doc.rtf ไหน-R21-numid.rtf platypus.rtf สกรีนช็อต 2011-01-21 เวลา 2.17.50 น emacs print help.png บันทึก new_month_log พิเศษ Google-ngram-critique.html perl_path.html NL DWE_BEN_89808.2.ann foo dofoo 100811_from_iMac_Documents_in_dock.zip to-palikir.zip tmp ไฟล์ล้าง บาร์ ข้อมูลการสแกนเอกสาร CMP-MG-Ann-numids finished_numids to_annotate_numids manls.ps Mike_address_ticket cyp2.out cyp3.out ค้นหา-cyp.out manls.out DWE_BEN_89808.2.text tag2.txt l2.txt du-H-d3.txt finished_ann_numids_110407_1714.txt finished_all_numids_110407_1718.txt data-dir-scan.perl.doc.txt ไหน-R21-numid.txt finannid.txt toannid.txt b9-พื้นที่ทำงาน-anndiff.txt tag.txt duh.txt ทำ mail.txt safextn.txt mg3longhdr.txt finished_numids.txt 41692-langnames.txt TimeAnnotationGuidelines.txt 41langs.txt thing4-homedir-links.txt bnlinks.txt grants.txt mata-ไฟล์ reports.txt logx.txt logx b9-พื้นที่ทำงาน-anndiff.txt ~ bnlinks.txt ~
ls -F
-F
) ถ้าท่อผ่านrev
& sort
ไม่ได้ตัดสี ( -G
)
หากคุณไม่ได้อยู่ใน linux
ls -l |sort -d -k 1.1,1.1r -k 9 |awk '{print $9}'
ควรเรียงลำดับไดเรกทอรีก่อน (แจ้งให้เราทราบหากฉันผิด) ไม่ได้เรียงตามส่วนขยาย แต่คุณต้องทำให้คำสั่ง awk ยุ่งมากขึ้นหากคุณต้องการทำเช่นนั้น ...
เพื่อให้ทำงานกับชื่อที่มีช่องว่างฉันอาจแทนที่ awk ด้วยสิ่งที่ต้องการsed -E -e 's/([^ ]+[ ]+){8}//'
ตัดออกจาก 8 ช่องแรกแทนการพิมพ์ที่ 9
CLICOLOR
เปิดใช้งานสิ่งนี้จะเป็นการลบสีออก
sed -E -e 's/([^ ]+[ ]+){8}//'
ตัดออก 8 ช่องแรกแทนที่จะพิมพ์ 9
ls -l |sort -d -k 1.1,1.1r -k 9 | cut -c 50-
หากคุณใช้งานบน Linux GNU ls
รองรับ--sort
ตัวเลือก: -
ls --sort=extension
วิธีที่ดีคือการแยกโฟลเดอร์ในตอนแรกจากนั้นจัดเรียงไฟล์ตามส่วนขยายโดยการเรียงลำดับและย้อนกลับ:
ls -p | grep /;ls -p | grep -v / | rev | sort | rev
ฉันเพิ่มของฉัน. bashrc (linux) บรรทัด
alias lx = "ls -X"
ฉันพิมพ์ lx และทำให้มันเรียงตามนามสกุล
ls -X
:)
--sort=extension
และ--group-directories-first
เท่านั้น--group-directories
) ทำงานได้ดีสำหรับฉันใน Ubuntu 12.10 คุ้มค่ากับการยิงบนเครื่องของคุณเช่นกัน! =)