ฉันจะแยกไดเรกทอรีเมื่อแสดงรายการไฟล์ได้อย่างไร


21

ฉันจะแยกไดเรกทอรีเมื่อแสดงรายการไฟล์ในไดเรกทอรีปัจจุบันได้อย่างไร

ls .

^ จะรวมไดเรกทอรีในรายการ

คำตอบ:


23

ลองอันนี้:

find . -maxdepth 1 -not -type d

3
ทำให้มันง่าย: $ find -type f
ติดขัด

9
ไม่ (1) จะเรียกซ้ำ (2) ไม่แสดงรายการลิงก์ @Steve ถามถึงความเทียบเท่าls .โดยไม่ต้องไดเรกทอรี - และนี่คือ
Alexander Gladysh

2
การเพิ่ม-lsหรือ-exec ls -l {} \;จะทำให้มันเหมือนls -lไม่มีไดเรกทอรี
Ladadadada

15

เพื่อให้ได้มันเทียบเท่ากับls .คุณไม่จำเป็นต้องแสดง dirs ที่ซ่อนอยู่

find . -maxdepth 1 -not -type d -and -not -name '.*'

และยังทำให้คุณมีเครื่องหมาย './' นำหน้าแต่ละชื่อไฟล์ นั่นไม่ใช่ปัญหาจริงๆ แต่ฉันคิดว่ามันน่าเกลียด ฉันไปกับ:

ls -p | grep -v '/$'

และนั่นจะทำให้คุณมีรายชื่อที่มีลักษณะเหมือนกันและคุณสามารถเพิ่มlsอาร์กิวเมนต์เพิ่มเติมได้เช่นกัน เพิ่ม a --color=alwaysและคุณจะได้รับ dircolors ของคุณกลับมาหรือ-aเพื่อดูไฟล์ที่ซ่อนอยู่

ฉันชอบคำตอบของอเล็กซานเดอร์เพราะจริง ๆ แล้วเขาขึ้นอยู่กับลักษณะของระบบไฟล์ของไฟล์นั้น คำตอบของฉันจะถูกหลอกโดยไฟล์ที่มี '/' เป็นอักขระตัวสุดท้ายในชื่อ แต่ดูเหมือนว่ามันจะขอปัญหา


1
'-Not' เป็น GNU ค้นหาที่เกี่ยวข้องตามที่มันไม่ได้เป็นตาม POSIX มันจะดีกว่าที่จะไม่สอนตัวเลือกเหล่านี้เป็นผู้ใช้อาจมี habbits "เลวร้าย" และความรู้สึกที่หายไปใน UNIXes อื่น ๆ :)
jirib

2
@JiriXichtkniha ทางเลือก POSIX คือ -not?
Lucas Gallindo


3

แม้ว่ามันจะเป็นโพสต์เก่า แต่ฉันคิดว่านี่อาจช่วยได้ ..

$ ls -l | grep -v ^ d

มันจะแสดงรายการไฟล์ทั้งหมดรวมถึง symlink, ตัวอักษรและไฟล์บล็อก


คำตอบนี้มีให้แล้วกว่าหนึ่งปีก่อนโดยติดขัด (ทำให้เสียงภาพ)
Alexx Roche

2

โซลูชัน "ค้นหา" ด้านบนสูญเสียความสามารถบางส่วนของls - ตัวอย่างเช่น: แสดงรายการไฟล์เท่านั้นเรียงลำดับตามเวลาในการแก้ไขจากมากไปน้อย

คำตอบ "ls -p | grep" ไม่ได้จัดการกับองค์ประกอบอื่น ๆ ของ ls เช่น -R หากพวกเขาต้องการ

คำตอบต่อไปนี้ขณะที่อีกอย่างละเอียดในความคิดของฉันสะท้อนให้เห็นถึง truest LSพฤติกรรมและความยืดหยุ่นมากที่สุดสำหรับการเลือก "ไฟล์เท่านั้น"

ls -t . | while read line; do
  if [ -f $line ]; then
    echo $line
  fi 
done

เพียงแค่เปลี่ยนสวิตช์ ls ตามต้องการและผลลัพธ์จะถูกส่งคืนพร้อมไฟล์เท่านั้น หากจำเป็นต้องเชื่อมโยงและรายการอื่น ๆ การทำงานซ้ำเล็กน้อยจะต้องทำเพื่อการทดสอบสำหรับการรวม


0
ls $(file --no-pad  -F' '  * | grep -v directory | cut -d' ' -f1)

ด้วยวิธีนี้คุณยังสามารถใช้ตัวเลือกอื่น ๆ ได้ตามlsปกติ หรือ ... ลบ-vเพื่อแสดงรายการไดเรกทอรีเท่านั้น หรือ ... แทนที่ไดเรกทอรีด้วยไฟล์ประเภทอื่นที่fileเข้าใจและรายงานเช่น ASCII, empty, ELF และอื่น ๆ


สิ่งนี้จะไม่ทำงานหากชื่อไฟล์ใด ๆ ที่ระบุในรายการมีช่องว่าง
Psychonaut

ls -t .|while read f;do [ -f "$f" ]&& echo $f;doneในการทดสอบของฉันเร็วขึ้นประมาณ 3 เท่า
Alexx Roche

0

ฉันอยู่ในระบบที่findไบนารีไม่สนับสนุน-notและฉันสิ้นสุดการใช้:

ls|while read f;do [ -f "$f" ]&& echo $f;done

ข้อดี: ไม่พึ่งพาสิ่งอื่นนอกจากsh ls echo
เข้ากันได้กับ bash และ dash
สามารถเปลี่ยนเพื่อให้ตรงกับสิ่งอื่น ๆ (เช่นไดเรกทอรี) โดยการเปลี่ยน-f
เป็นเร็วกว่าคำตอบบางอย่างและใช้ RAM น้อยและ CPU น้อยกว่า

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