ฉันกำลังพยายามรับรายการไฟล์ที่ฉันสามารถไพพ์ไปที่ wc -l
เพื่อรับจำนวนคำของไฟล์ทั้งหมด (ไม่ได้ใช้ wc
โดยตรงดังนั้นฉันจึงสามารถกรองรายการไฟล์ก่อนใช้คำสั่ง)
โครงสร้างไดเร็กทอรีของฉันเป็นดังนี้:
- folder
- file.php
- file2.html
- file3.php
- folder1
- folder2a
- folder3b
- folder4
- file.php
- file2.php
ฉันต้องการแยกไดเร็กทอรีบางตัวใน find
ของฉัน ซึ่งส่วนใหญ่เป็นไลบรารีและสิ่งอื่น ๆ ที่ฉันไม่ได้สร้าง ฉันสามารถทำได้ด้วยตนเองดังนี้:
find /var/www/html/ -type f -not -path "/var/www/html/folder/folder1" -not -path "/var/www/html/folder/folder2a"
ฯลฯ
อย่างไรก็ตาม การระบุโฟลเดอร์ทั้งหมดอย่างชัดเจนเป็นเรื่องน่ารำคาญ และรายการสามารถเปลี่ยนแปลงได้ทุกเมื่อเช่นกัน ฉันได้ลองใช้ /*
และ /**
เพื่อจับคู่รูปแบบ แต่ก็ไม่ได้ผลเช่นกัน มีวิธีสำหรับหนึ่งในคำสั่ง not ในคำสั่ง find ของฉันที่ฉันสามารถแยกไดเรกทอรีย่อยทั้งหมดของไดเรกทอรีใดไดเรกทอรีหนึ่งได้ แต่ ไม่ แยกไดเรกทอรีนั้นเองหรือไม่ (รวมไฟล์ในไดเรกทอรีนั้นด้วย) แต่ไม่มีไดเรกทอรีย่อยใด ๆ)?
ต่อไปนี้เป็นการเดาตามสัญชาตญาณ:
find /var/www/html -not -path '/var/www/html/someotherbadfolder' -type f \( ! -path "/var/www/html/folder" -maxdepth 1 \)
แต่ถึงแม้ find
จะบ่นเกี่ยวกับเรื่องนี้:
find: warning: you have specified the -maxdepth option after a non-option argument -not, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
ดูเหมือนว่า maxdepth
จะไม่สามารถรวมในการดำเนินการได้
มีการถามตอบมากมายเกี่ยวกับการยกเว้นไดเร็กทอรีย่อยเฉพาะ แต่ไม่ใช่ไดเร็กทอรีย่อยทั่วไปในไดเร็กทอรีย่อยเฉพาะ
ฉันสามารถทำให้มันทำงานในไดเร็กทอรีเดียวด้วย -maxdepth 1
ได้ แต่ปัญหาคือนี่เป็นส่วนหนึ่งของคำสั่งที่ใหญ่กว่า และนั่นไม่ทำงานเมื่อฉันรันคำสั่งแบบเต็ม อาจเป็นไปได้ว่าฉันอาจจำเป็นต้องยกเว้นไดเรกทอรีย่อยที่เฉพาะเจาะจงรวมถึงไดเรกทอรีย่อยใดๆ ในไดเรกทอรีย่อยเฉพาะอื่นๆ หลายรายการ