ฉันจะแยกไดเรกทอรีเมื่อแสดงรายการไฟล์ในไดเรกทอรีปัจจุบันได้อย่างไร
ls .
^ จะรวมไดเรกทอรีในรายการ
ฉันจะแยกไดเรกทอรีเมื่อแสดงรายการไฟล์ในไดเรกทอรีปัจจุบันได้อย่างไร
ls .
^ จะรวมไดเรกทอรีในรายการ
คำตอบ:
ลองอันนี้:
find . -maxdepth 1 -not -type d
ls .
โดยไม่ต้องไดเรกทอรี - และนี่คือ
-ls
หรือ-exec ls -l {} \;
จะทำให้มันเหมือนls -l
ไม่มีไดเรกทอรี
เพื่อให้ได้มันเทียบเท่ากับls .
คุณไม่จำเป็นต้องแสดง dirs ที่ซ่อนอยู่
find . -maxdepth 1 -not -type d -and -not -name '.*'
และยังทำให้คุณมีเครื่องหมาย './' นำหน้าแต่ละชื่อไฟล์ นั่นไม่ใช่ปัญหาจริงๆ แต่ฉันคิดว่ามันน่าเกลียด ฉันไปกับ:
ls -p | grep -v '/$'
และนั่นจะทำให้คุณมีรายชื่อที่มีลักษณะเหมือนกันและคุณสามารถเพิ่มls
อาร์กิวเมนต์เพิ่มเติมได้เช่นกัน เพิ่ม a --color=always
และคุณจะได้รับ dircolors ของคุณกลับมาหรือ-a
เพื่อดูไฟล์ที่ซ่อนอยู่
ฉันชอบคำตอบของอเล็กซานเดอร์เพราะจริง ๆ แล้วเขาขึ้นอยู่กับลักษณะของระบบไฟล์ของไฟล์นั้น คำตอบของฉันจะถูกหลอกโดยไฟล์ที่มี '/' เป็นอักขระตัวสุดท้ายในชื่อ แต่ดูเหมือนว่ามันจะขอปัญหา
ลองนี้:
$ ค้นหา -type f -maxdepth 1
หรือสิ่งนี้:
$ ls -p | egrep -v / $
$ ls -la | egrep -v ^ d
แม้ว่ามันจะเป็นโพสต์เก่า แต่ฉันคิดว่านี่อาจช่วยได้ ..
$ ls -l | grep -v ^ d
มันจะแสดงรายการไฟล์ทั้งหมดรวมถึง symlink, ตัวอักษรและไฟล์บล็อก
โซลูชัน "ค้นหา" ด้านบนสูญเสียความสามารถบางส่วนของls - ตัวอย่างเช่น: แสดงรายการไฟล์เท่านั้นเรียงลำดับตามเวลาในการแก้ไขจากมากไปน้อย
คำตอบ "ls -p | grep" ไม่ได้จัดการกับองค์ประกอบอื่น ๆ ของ ls เช่น -R หากพวกเขาต้องการ
คำตอบต่อไปนี้ขณะที่อีกอย่างละเอียดในความคิดของฉันสะท้อนให้เห็นถึง truest LSพฤติกรรมและความยืดหยุ่นมากที่สุดสำหรับการเลือก "ไฟล์เท่านั้น"
ls -t . | while read line; do
if [ -f $line ]; then
echo $line
fi
done
เพียงแค่เปลี่ยนสวิตช์ ls ตามต้องการและผลลัพธ์จะถูกส่งคืนพร้อมไฟล์เท่านั้น หากจำเป็นต้องเชื่อมโยงและรายการอื่น ๆ การทำงานซ้ำเล็กน้อยจะต้องทำเพื่อการทดสอบสำหรับการรวม
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
ด้วยวิธีนี้คุณยังสามารถใช้ตัวเลือกอื่น ๆ ได้ตามls
ปกติ หรือ ... ลบ-v
เพื่อแสดงรายการไดเรกทอรีเท่านั้น หรือ ... แทนที่ไดเรกทอรีด้วยไฟล์ประเภทอื่นที่file
เข้าใจและรายงานเช่น ASCII, empty, ELF และอื่น ๆ
ls -t .|while read f;do [ -f "$f" ]&& echo $f;done
ในการทดสอบของฉันเร็วขึ้นประมาณ 3 เท่า
ฉันอยู่ในระบบที่find
ไบนารีไม่สนับสนุน-not
และฉันสิ้นสุดการใช้:
ls|while read f;do [ -f "$f" ]&& echo $f;done
ข้อดี: ไม่พึ่งพาสิ่งอื่นนอกจากsh ls echo
เข้ากันได้กับ bash และ dash
สามารถเปลี่ยนเพื่อให้ตรงกับสิ่งอื่น ๆ (เช่นไดเรกทอรี) โดยการเปลี่ยน-f
เป็นเร็วกว่าคำตอบบางอย่างและใช้ RAM น้อยและ CPU น้อยกว่า