Solaris เทียบเท่ากับความลึก / พรุน?


10

ฉันพยายามค้นหาบางไฟล์ภายในไดเรกทอรี โดยค่าเริ่มต้นการค้นหาcommandคือการค้นหาไดเรกทอรีที่ฉันได้ระบุไว้และเป็นไดเรกทอรีย่อย

ผมพยายามที่จะใช้depth/maxdepthและpruneแต่ไม่มีอะไรช่วยในการเอาชนะนี้ ใครสามารถชี้วิธีที่ถูกต้องในการใช้ความลึก / พรุนใน Solaris ได้หรือไม่?

รหัสของฉันมีลักษณะเช่นนี้:

find file_path -depth 1 -name '*.log'

ฉันได้รับข้อผิดพลาดต่อไปนี้:

find: bad option 1
find: [-H | -L] path-list predicate-list

คำตอบ:


15

คุณสับสนสองตัวเลือกที่ไม่เกี่ยวข้องที่มีชื่อคล้ายกันคลุมเครือ:

  • -depthไม่มีข้อโต้แย้งใด ๆ หากมีอยู่ระบบจะบอกfindให้ประมวลผลเนื้อหาของไดเรกทอรีก่อนประมวลผลตัวไดเรกทอรีเอง
  • -maxdepth N (โดยที่ N เป็นจำนวนเต็ม) จำกัด การเรียกซ้ำถึงระดับ N ของไดเรกทอรีย่อย

-maxdepthตัวเลือกที่เป็นส่วนขยายที่พบในบางรุ่นfindแต่ไม่ Solaris ของ มีเคล็ดลับในการใช้เฉพาะตัวเลือกมาตรฐานfindเพื่อประมวลผลไดเรกทอรีโดยไม่ต้องเรียกใช้ซ้ำ: ใช้-pruneกับไดเรกทอรีย่อย แต่ไม่รวมไดเรกทอรีระดับบนสุด เนื่องจากวิธีเดียวที่จะจับคู่ไดเรกทอรีระดับบนสุดคือตามชื่อให้จัดการชื่อให้เป็น.(ซึ่งจะไม่เป็นชื่อของไดเรกทอรีย่อย)

find /directory/to/traverse/. -name . -o \
                              -type d -prune -o \
                              -name '*.log' -print

ฉันกำลังเผชิญกับปัญหานี้มากและวิธีแก้ปัญหานี้ก็ช่วยได้ ฉันใช้เวลาทั้งวันพยายามหาวิธีแก้ปัญหาเพื่อให้มันใช้งานได้ Grrr, Solaris
Kevin Teljeur

คุณเห็นปัญหาใด ๆ ที่ใช้ sed เพื่อลบ /./ find $ {directory} / sh / - ชื่อ -o -type d -prune -o -print | sed 's /\/\.\//\//'
Ethan Post

@EthanPost คุณสามารถทำได้ แต่ค้นหาการใช้งานโดยไม่ต้อง-mindepthและ-maxdepthเป็นสายพันธุ์ที่หายไป หากการค้นหาของคุณมี-maxdepthให้ใช้find /directory/to/traverse -mindepth 1 -maxdepth 1 -name '*.log'
Gilles 'หยุดความชั่วร้าย'

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