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


24

ฉันต้องการสร้างรายการไฟล์ทั้งหมดในไดเรกทอรีโดยไม่ต้องแสดงรายการไดเรกทอรีย่อยใด ๆ ที่อยู่ในไดเรกทอรีเดียวกันนั้นและพิมพ์รายการนั้นเป็นไฟล์ใหม่

ls -d * > filelist

จะสร้างรายการไฟล์ทั้งหมดในไดเรกทอรีปัจจุบัน แต่ยังแสดงรายการไดเรกทอรีย่อยในไดเรกทอรีปัจจุบัน ฉันลองfindคำสั่งโดยใช้-maxdepth 1ตัวเลือก - อย่างไรก็ตามรูปแบบผลลัพธ์เป็นปัญหาเนื่องจาก find จะพิมพ์พา ธ พร้อมกับชื่อไฟล์

หากใครสามารถโปรดบอกฉันบางทีคำสั่งหรือตัวเลือกอื่นที่จะใช้ที่จะสร้างรายการผลลัพธ์เพียงไฟล์ในไดเรกทอรีและไม่ใช่ชื่อของไดเรกทอรีย่อยหรือเนื้อหาของพวกเขาฉันจะขอบคุณมัน


2
ฉันสับสนls -d *เพียงแค่แสดงรายการไฟล์และโฟลเดอร์ในโฟลเดอร์ปัจจุบันยกเว้นไฟล์ / โฟลเดอร์ที่ซ่อนอยู่ที่นี่
GM-Script-Writer-62850

ใช่ แต่ฉันไม่ต้องการให้โฟลเดอร์ในไดเรกทอรีนั้นอยู่ในรายการเพียงต้องการให้ไฟล์ในไดเรกทอรีนั้นมีรายชื่อ
janet

คำตอบ:


22

วิธีแก้ปัญหาการค้นหา:

find . -maxdepth 1 -type f -printf '%f\n'

วิธีการแก้ปัญหา Bash-based:

for f in *; do [[ -d "$f" ]] || echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -d "$f" ]] || ls -- "$f"; done

โซลูชันที่ใช้ bash ช่วยให้คุณได้ทุกสิ่งที่ไม่ใช่ไดเรกทอรี มันจะรวมสิ่งต่าง ๆ เช่นชื่อไปป์ (คุณอาจต้องการสิ่งนี้) หากคุณต้องการไฟล์เพียงใช้findคำสั่งหรืออย่างใดอย่างหนึ่งเหล่านี้:

for f in *; do [[ -f "$f" ]] && echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -f "$f" ]] && ls -- "$f"; done

หากคุณกำลังจะใช้สิ่งนี้เป็นประจำคุณสามารถใส่ชื่อแทนได้ใน~/.bashrc:

alias lsfiles='for f in *; do [[ -f "$f" ]] && ls -- "$f"; done'

เนื่องจากคุณจดบันทึกไว้ในความคิดเห็นที่คุณอยู่บน OSX มากกว่า Ubuntu ฉันจะแนะนำว่าครั้งต่อไปที่คุณส่งคำถามไปยังAppleหรือไซต์Unix & Linux Stack Exchange ทั่วไป


1
ตรวจสอบให้แน่ใจว่าโซลูชันเหล่านี้ถูกต้องสำหรับคุณโดยพิจารณาจากว่าคุณต้องการรวมไฟล์ที่ซ่อนอยู่หรือไม่
Kevin Wheeler

10

รายการชื่อไฟล์เท่านั้น:

1. ls -p | grep -v / (ไม่มีไฟล์ที่ซ่อนอยู่)
 2. ls -l | grep ^ - | tr -s '' | cut -d '' -f 9 (ไม่มีไฟล์ที่ซ่อนอยู่)

 a) ls -pa | grep -v / (พร้อมไฟล์ที่ซ่อนอยู่)
 b) ls -la | grep ^ - | tr -s '' | cut -d '' -f (พร้อมไฟล์ที่ซ่อนอยู่)

รายการไดเรกทอรีเท่านั้น:

1. ls -p | grep / (ไม่มีการซ่อน)
 2. ls -l | grep ^ d | tr -s '' | cut -d '' -f 9 (ไม่ซ่อน)

 a) ls -pa | grep / (ซ่อนไว้)
 b) ls -l | grep ^ d | tr -s '' | cut -d '' -f 9 (ซ่อนไว้)

grep -v -e ^ $ คือการลบบรรทัดว่างออกจากผลลัพธ์

รายละเอียดเพิ่มเติม :
แฟล็ก ls -p คือการใส่ '/' ที่ส่วนท้ายของชื่อไดเรกทอรี, แฟล็ก -R ใช้สำหรับการค้นหาแบบเรียกซ้ำ, -l สำหรับการแสดงรายการที่มีข้อมูล, - สำหรับรายชื่อทั้งหมด (รวมถึงไฟล์ที่ซ่อน) ด้วย info, grep แฟล็ก -v สำหรับการกลับผลลัพธ์และแฟล็ก -e สำหรับการจับคู่ regex


7

ในการแสดงรายการไฟล์ปกติเท่านั้น:

ls -al | grep ^-

ด้วยลิงก์สัญลักษณ์รวม:

ls -al | grep ^[-l]

ในกรณีที่ตัวอักษรตัวแรกของรายการอธิบายชนิดของไฟล์ดังนั้นหมายความว่ามันเป็นแฟ้มปกติสำหรับการเชื่อมโยงสัญลักษณ์คือ-l

Debian / Ubuntu

พิมพ์ชื่อของไฟล์ที่ตรงกันทั้งหมด (รวมถึงลิงค์):

run-parts --list --regex . .

ด้วยเส้นทางที่แน่นอน:

run-parts --list --regex . $PWD

พิมพ์ชื่อของไฟล์ทั้งหมด/etcที่ขึ้นต้นด้วยpและลงท้ายด้วยd:

run-parts --list --regex '^p.*d$' /etc


4

ฉันขอแนะนำให้ใช้ find และเพียงลบชื่อไดเรกทอรีออกจากผลลัพธ์หากจำเป็น:

find . -type f -maxdepth 1 | sed s,^./,,

2
-maxdepth 1ควรมาก่อนตัวกรองใด ๆ และคุณสามารถบรรลุผลลัพธ์นี้โดยไม่ใช้sedกับ-printfตัวเลือกเช่น: find . -maxdepth 1 -type f -printf '%f\n'(สิ่งนี้จะมีประสิทธิภาพมากกว่าการใช้โปรแกรมเสริม)
evilsoup

3
ls -1 --file-type | grep -v '/' | sed s/@$// > filelist

ตัวเลือกอื่นที่เป็นไปได้คือ

ls -F | grep -v '/' | sed /[@*]$// > filelist

การ--file-typeวาง a / ที่ส่วนท้ายของโฟลเดอร์ (แต่ยัง @ ที่ส่วนท้ายของลิงก์สัญลักษณ์ The grep -v '/'ลบไดเรกทอรีย่อย (เพราะตอนนี้พวกเขาลงท้ายด้วย '/') การsed s/@$//ลบนั้น @ -1 จะพิมพ์ไฟล์หนึ่งไฟล์ต่อบรรทัด เพื่อให้ grep -v ทำงานได้อย่างถูกต้อง


ขอขอบคุณสำหรับการตอบสนองของคุณ. น่าเสียดายที่มันไม่ทำงานสำหรับฉันบางทีฉันกำลังดำเนินการไม่ถูกต้อง ถ้าฉันใช้คำสั่งที่แน่นอนที่คุณให้ฉันฉันได้รับข้อผิดพลาดต่อไปนี้: ls: ตัวเลือกที่ผิดกฎหมาย - - การใช้งาน: ls [-ABCFGHLPRSTWabcdefghiklmnopqrstuwx1] [ไฟล์ ... ] ฉันลองใช้อักขระ * ในตัวแทน ร่วมกับ - ไฟล์ประเภท ถ้าคุณสามารถชี้แจงฉันจะขอบคุณมัน!
Janet

คำสั่งใช้งานได้สำหรับฉัน (ใช้งาน 13.04) คุณใช้อูบุนตูรุ่นใดอยู่ -1ไม่สำคัญว่าคุณจะไม่ต้องการ grep หากคุณต้องการรวมไฟล์ที่ซ่อนไว้ให้ใช้-aตัวเลือกในls
GM-Script-Writer-62850

ที่จริงฉันกำลังทำงานกับ mac บางทีคำสั่งอาจแตกต่างกันเล็กน้อยใน mac os x หรือ unix?
Janet

1
คุณสามารถลองls -F | grep -v '/' | sed s/[@*]$// > filelist
Dr.Tower
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.