ทำให้ค้นหาเครื่องหมายทับหลังจากไดเรกทอรี?


19

ฉันจะทำให้คำสั่ง find แสดงสแลชหลังจากไดเร็กทอรีได้อย่างไร? ตัวอย่างเช่นผมต้องการdirที่จะแสดงขึ้นเป็นแทนdir/ dirฉันกำลังใช้find . -print

คำตอบ:


10

portably:

find . -type d -exec sh -c 'printf "%s/\n" "$0"' {} \; -or -print

หากคุณยินดีที่จะแสดงรายการไดเรกทอรีและไฟล์แยกกัน (คุณสามารถรวมเอาท์พุทโดยการเรียงลำดับ):

{ find . -type d -print | sed 's!$!/!'; find . \! -type d; } | sort

ด้วย GNU หาดูคำตอบ Shawn เจฟฟ์ของ

หากคุณยินดีที่จะเสี่ยงอักขระที่ไม่ใช่พิมพ์ถูก mangled แม้ไม่ได้ส่งสัญญาณไปยังสถานีให้ดูคำตอบของ ddeimeke

ใน zsh: print -rl -- **/*(DM)( Dเพื่อรวมไฟล์ dot Mเพื่อเพิ่ม/ไดเรกทอรีหลัง)


คำสั่งแรกไม่ได้พิมพ์สแลชต่อท้ายสำหรับฉัน แต่อันที่สองทำ
สตีเวน

15
find . \( -type d -printf "%p/\n" , -type f -print \)

สิ่งนี้ใช้คำสั่ง printf เพื่อจัดรูปแบบชื่อไดเร็กทอรีและการพิมพ์มาตรฐานสำหรับส่วนที่เหลือ


ฉันยังคงประหลาดใจกับความยืดหยุ่นในการค้นหา
Shawn J. Goff

1
โปรดทราบว่า-printfเฉพาะสำหรับ GNU ค้นหา
Gilles 'หยุดชั่วร้าย'

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

1
จากคำตอบนี้และ Gilles 'ฉันพบกับเวอร์ชั่นที่ง่ายขึ้นดังต่อไปนี้:find . -type d -printf '%p/\n' -or -print
Teresa e Junior

8

อาจจะ

find . -print0 | xargs -0 ls -Fd

เป็นตัวเลือกเช่นกัน

จากหน้าโซลาริส:

-F ทำเครื่องหมายไดเรกทอรีด้วยเครื่องหมายสแลช (/), ประตูที่มีเครื่องหมายมากกว่า - มากกว่า (>), ไฟล์เรียกทำงานที่มีเครื่องหมายดอกจันต่อท้าย (*), FIFO ที่มีแถบแนวตั้งต่อท้าย (|), ลิงก์สัญลักษณ์ที่มีต่อท้าย " ที่ "sign (@) และซ็อกเก็ตตระกูลที่อยู่ AF_UNIX ที่มีเครื่องหมาย trailingequals (=) ติดตาม symlinks ที่ชื่อว่าเป็นตัวถูกดำเนินการ


@Gilles: ขอบคุณสำหรับ "d" ;-)
ddeimeke

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