ฉันจะทำให้ ls แสดงเฉพาะไฟล์ได้อย่างไร


24

ฉันคิดว่าจะต้องมีวิธีในการสร้าง ls แสดงเฉพาะไดเรกทอรีที่ไม่ใช่ แต่หน้าคนไม่ทำให้ชัดเจน


ไม่แน่ใจเรื่องlsแต่คุณสามารถทำมันได้อย่างง่ายดายด้วยคำสั่ง:file file /directory/containing/the/files -maxdepth 1 -not -type d
Henning Kockerbeck

1
อีกวิธีหนึ่งที่จะกรองการส่งออกของlsผ่านบางอย่างเช่นgrep ls -1F /directory/containing/the/files | grep -vE /$แต่ทราบว่าการแยกการส่งออกของ LS สามารถหากิน
Henning Kockerbeck

คำตอบ:


37
ls -p | grep -v /

การใช้ls -ptell lsเพื่อผนวกสแลชไปยังรายการซึ่งเป็นไดเร็กทอรีและการใช้grep -v /tell grepเพื่อส่งคืนเฉพาะบรรทัดที่ไม่มีสแลช


ฉันตรวจสอบอันนี้เพราะมันเป็นคำตอบที่ฉันชอบ (ในขณะที่ฉัน upvote ทั้งหมดของพวกเขา) แต่ตอนนี้พยายามหาวิธีที่จะวางไว้ในคอลัมน์และกลับลำดับของเอาท์พุท ...
thinksinbinary

"คุณสามารถใช้ 1 สวิตช์สำหรับรายการคอลัมน์เดียว" ขออภัยฉันลองคิดว่าคุณหมายถึงอะไรฉันจะขอบคุณและเป็นตัวอย่าง / คำอธิบายถ้าคุณต้องการฉันรู้เพียงว่าสวิตช์นั้นเกี่ยวกับการเขียนโปรแกรม C
คิดอย่างไร

@sdkks คุณไม่จำเป็นต้องใช้1สวิทช์เมื่อวางท่อเอาต์พุตเพราะมันจะใช้ค่าเริ่มต้นเป็นคอลัมน์เดี่ยวในสถานการณ์นั้น ถ้านั่นคือสิ่งที่คุณมีความหมาย
thomasrutter

@thinkinbinary ไม่แน่ใจว่าจะทำให้หลายคอลัมน์ได้อย่างไร แต่คุณสามารถค้นหาหรือถามคำถามแยกต่างหากของคุณและใครบางคนจะรู้
thomasrutter

7

คุณสามารถลองสิ่งนี้:

find . -maxdepth 1 -not -type d

และแผนที่นี้กับนามแฝงพิเศษ

แต่ถ้าคุณกระตือรือร้นที่จะใช้lsคำสั่งจริงๆที่นี่:

ls -p | egrep -v /$


6

อีกวิธีหนึ่งคือ:

ls -lAh | grep -v '^d'

วิธีการนี้จะแสดงรายการใน

  • -l รูปแบบรายการยาว
  • -A แสดงเกือบทั้งหมด (แสดงไฟล์ที่ซ่อนอยู่ แต่ไม่แสดง.และ..)
  • -h ขนาดไฟล์ที่มนุษย์อ่านได้

ในขณะที่ grep

  • -v อย่าแสดงระเบียนที่ตรงกัน
  • Regular expressionตัวกรอง^d- เริ่มต้นด้วยตัวอักษร d (สำหรับไดเรกทอรี) เช่นdrwxrwxr-x <some file details> <foldername>

หากคุณไม่ต้องการพิมพ์ทุกครั้งคุณอาจเปลี่ยนเป็นนามแฝงสำหรับโปรไฟล์ bash / shell


2

ฉันเห็นในความคิดเห็น (@thinksinbinary) ของคุณเกี่ยวกับคำตอบโดย @thomasrutter ที่คุณต้องการพิมพ์ในลำดับย้อนกลับและในคอลัมน์ คุณอาจจะคิดออกหรือย้ายแล้ว แต่นี่คือ:

ls -pr | grep -v / | column
  • -pเพิ่มเครื่องหมายสแลช ('/') ไปยังชื่อไดเรกทอรี
  • -rฝืนคำสั่งของเอาท์พุท
  • -vให้ grep ทำการค้นหาแบบกลับด้านเพื่อพิมพ์ทุกอย่างยกเว้นไดเรกทอรี ( ทุกสิ่งที่ไม่มี '/' ที่ -p วางไว้ )
  • " columnวางไว้ในคอลัมน์" - กัปตันชัดเจน

1
ฉันคิดว่ามันเยี่ยมมากที่คนในฟอรัมอูบุนตูยังคงแสดงความคิดเห็นและอ่านโพสต์ของคุณเป็นเวลานาน ฉันอยากกลับไปใช้ linux เพื่อเรียนรู้การประกอบและระบบปฏิบัติการเนื่องจากการทำเช่นนี้บน windows นั้นยากกว่ามาก ขอบคุณ!
Thinksinbinary

0
ls -F | grep -v /

คำสั่งดังกล่าวจะแสดงไฟล์ แต่มันมี symlinks, ไพพ์ ฯลฯ หากคุณต้องการกำจัดมันด้วยคุณสามารถใช้หนึ่งในแฟล็กที่ระบุด้านล่าง

ls -Fผนวกสัญลักษณ์เข้ากับชื่อไฟล์ สัญลักษณ์เหล่านี้แสดงข้อมูลที่เป็นประโยชน์เกี่ยวกับไฟล์

ls -F | grep -Ev '/|@|*|=|>|\|'

คำสั่งด้านบนแสดงเฉพาะไฟล์

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