วิธีเปิดใช้งานการแบ่งหน้าสำหรับคำสั่ง ls?


34

ตัวเลือกที่เทียบเท่าสำหรับlsคำสั่งเพื่อเปิดใช้งานการแบ่งหน้าเหมือนใน DOS dir /pทำอะไร?

คำตอบ:


54

ไม่มีตัวเทียบเท่าที่ตรงไปตรงมาlsแต่มีlessยูทิลิตี้ซึ่งจะจัดรูปแบบผลลัพธ์ของคำสั่งใด ๆ เป็นหน้าแยก, เลื่อนได้ตามบรรทัดหรือหน้า:

ls -C | less

ตำแหน่งที่-Cทริกเกอร์แสดงคอลัมน์ ใช้lahเป็นข้อโต้แย้ง ( ls -lah) เพื่อให้ได้ลิตรครับโดยการแสดงผลที่สอดคล้องกับไฟล์ LL การแสดง (รวมถึงคนที่ซ่อนอยู่) และเอชอู filesizes อ่าน

  • หากต้องการให้สีแสดงขึ้นอย่างถูกต้องคุณต้องเพิ่ม--color=alwaysอาร์กิวเมนต์lsและ-Rอาร์กิวเมนต์น้อย *

    ls -C --color=always | less -R

    ข้อความแสดงแทน
    สิ่งนี้แสดง 'ls -ah --color = always | น้อยกว่า -R '

ในทางตรงกันข้ามกับmore, lessจะช่วยให้คุณเลื่อนการส่งออก นอกจากนี้ยังเร็วกว่าเล็กน้อยสำหรับรายชื่อที่มีขนาดใหญ่มาก

ท่อทำงานดังนี้:

ทุกโปรแกรมมีอินพุตและเอาต์พุตไพพ์จะเปลี่ยนทิศทางเอาต์พุตของหนึ่งโปรแกรม (ls) ไปยังอินพุตของโปรแกรมอื่น (น้อยกว่า) และคาดว่าอินพุตจะน้อยลงซึ่งมันก็ฟอร์แมต

  • dos เทียบเท่าโรงเรียนเก่ามากขึ้นจะเป็นpg:

    ls | pg
    

นอกจากนี้คุณยังสามารถ

  • ใช้ls | headหรือls | tailเพื่อแสดงเฉพาะส่วนแรกหรือส่วนสุดท้ายของเอาต์พุต
  • ใช้watch "ls"เพื่อเปิดจอแสดงผลอัพเดตทุก ๆ วินาทีเพื่อดูการเปลี่ยนแปลง
  • ใช้banner $(ls)ถ้าคุณนั่งห่างจากหน้าจอจริงๆ (;

  • หากคุณพบว่านานเกินไปที่จะจำคุณสามารถตั้งค่านามแฝงได้:

    เปิด~/.bash_aliasesด้วยโปรแกรมแก้ไขข้อความและเพิ่มสิ่งนี้:

    alias lsp="ls -ah --color=always | less -R"
    

    (นี่คือสคริปต์ที่ทำงานทุกครั้งที่เทอร์มินัลเสมือนใหม่เริ่มต้นขึ้นคุณควรตั้งค่านามแฝงถาวรทั้งหมดของคุณที่นั่น)

    ตอนนี้คุณสามารถพิมพ์lspหรือชื่ออะไรก็ได้ที่คุณเลือก

    หากคุณต้องการส่งต่ออาร์กิวเมนต์ไปยังนามแฝงของคุณเราต้องกำหนดฟังก์ชันแทน:

    lsp(){ ls -ah --color=always "$@" | less -R; }
    

    ฟังก์ชั่นอย่างยิ่งมองเช่นนี้name(){ commands; };สามารถยอมรับข้อโต้แย้ง$1, $2, $3และอื่น ๆ $@หมายถึง"อาร์กิวเมนต์ทุกกรณีใด ๆ"

    ตอนนี้คุณสามารถเรียกใช้สิ่งที่ชอบlsp *.py, lsp -Cและอื่น ๆ เราแทรกอาร์กิวเมนต์ ณ จุดที่มันถูกส่งผ่านไปยัง ls เราสามารถใส่ $ * ให้น้อยลงถ้ามันเป็นคำสั่งที่สำคัญ คุณสามารถดูอาร์กิวเมนต์ทั้งหมดของ ls ได้ที่man ls(ควรอ่าน)


*: สาเหตุของสิ่งนี้คือเมื่อใดก็ตามที่คุณทำการวางท่อมันจะตรวจจับเทอร์มินัล (อันที่จริงแล้วโปรแกรมอื่น) ไม่สามารถแสดงสีได้ "--color = always" บังคับให้ ls ละเว้นสิ่งนี้ สวิตช์ -R ทำให้หน้าจอมีสีน้อยลงทำให้สีไม่ถูกต้อง


ขอบคุณคำตอบที่ยอดเยี่ยมส่วนที่มีนามแฝงมาถึงใจของฉันเมื่อฉันเห็น commandline ยาว ข้อเสียเพียงอย่างเดียวของการสร้างนามแฝงคือการใช้ตัวกรองสัญลักษณ์แทนเช่น * .pdf สิ่งนี้ไม่สามารถทำได้ใช่หรือไม่ อาจจะมีวิธีแก้ปัญหาสำหรับเรื่องนี้ด้วยหรือไม่?
NES

ทุกอย่างเป็นไปได้ ;-) ฉันได้เพิ่มข้อโต้แย้งบางอย่างฉันไม่เคยคิดมาก่อน
Stefano Palazzo

2
คุณให้มากกว่าที่คาดไว้ :) ขอบคุณสำหรับคำตอบอย่างละเอียด ป.ล. คุณรู้หรือไม่ว่ามีความแตกต่างระหว่างทุบตีและปลาที่ป้องกันไม่ให้อาร์กิวเมนต์นามแฝงนี้ผ่านวิธีการทำงานในปลา? ฉันได้รับนามแฝงที่ไม่มีตัวเลือกอาร์กิวเมนต์เพื่อทำงานที่นี่
NES

1
ตกลงที่นี่askubuntu.com/questions/19728/…คำถามใหม่เริ่มขึ้นขอบคุณอีกครั้งสำหรับคำตอบที่เป็นประโยชน์ของคุณ
NES

1
$*และ$@ทำสิ่งเดียวกัน $1 $2 $3 ...พวกเขาขยายตัวออกไป อย่างไรก็ตามอ้างถึง"$@"ขยาย"$1" "$2" "$3" ...ในขณะที่"$*"ขยายไป"$1 $2 $3 ..."(นั่นคือทั้งหมดมีข้อโต้แย้งในสตริงหนึ่งโดยใช้ตัวอักษรตัวแรกของIFSเป็นตัวคั่น) mywiki.wooledge.org/BashGuide/Parameters
geirha

3

ฉันไม่แน่ใจว่ามีบางคำสั่ง ls สำหรับการให้เลขหน้า อย่างไรก็ตามคุณอาจใช้ไพพ์และlessเช่นนี้:

ls | less

และใช้ q เพื่อออก


1

ลองหรือls | less ls | moreอันที่สองอยู่ใกล้กับรุ่น DOS


1
อาจมีวิธีอื่นหรือไม่? เพราะข้อเสียคือสำหรับฉันที่ colorization ของเปลือกไม่ได้ใช้งานเมื่อใช้ท่อ?
NES

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