ตัวกรองโฟลเดอร์อัจฉริยะ“ ไม่ประกอบด้วย”


13

Smart Folder ไม่รวมโฟลเดอร์

ท้ายที่สุดฉันต้องการผลลัพธ์ของคำสั่ง find นี้เป็นโฟลเดอร์อัจฉริยะ

เกณฑ์นั้นไม่ซับซ้อน:

  • ชื่อควรเป็น "README.md"
  • ประเภทควรเป็นไฟล์
  • เส้นทางไม่ควรมี "node_modules"

find /Users/me/Documents -type f -name README.md -not -path "*/node_modules/*"

ปัญหาคือรายการตัวดำเนินการเกณฑ์ของโฟลเดอร์สมาร์ทดูเหมือนจะไม่มีdoes not containตัวเลือก

ตัวเลือกที่ใช้ได้คือ:

  • ไม้ขีด
  • มี
  • เริ่มต้นด้วย
  • ลงท้ายด้วย
  • คือ
  • ไม่ใช่

เป็นไปได้ไหมที่จะทำสิ่งนี้ให้สำเร็จและถ้าเป็นเช่นนั้นจะเป็นอย่างไร?

แก้ไข 1

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

  • ที่เก็บเอกสาร
  • ที่มีชื่อโฟลเดอร์
  • ชื่อโฟลเดอร์

ฉันได้ลองรวมสิ่งเหล่านี้กับตัวดำเนินการต่อไปนี้:

  • มี
  • ไม้ขีด

และด้วยเงื่อนไขต่อไปนี้:

  • node_modules
  • node_modules

ในกรณีที่รองรับการค้นหาไวด์การ์ด

ฉันได้ลองใช้ตัวกรองตัวดำเนินการและข้อกำหนดทั้งหมดร่วมกันแล้ว

เอกสารไม่ดีในเรื่องนี้

ป้อนคำอธิบายรูปภาพที่นี่


2
คุณพบวิธีแก้ปัญหาหรือไม่?
gota

คำตอบ:


2

ดูเหมือนว่า kMDItemPath จะไม่สามารถทำสิ่งที่คุณต้องการได้:

ไม่มีผลในสปอตไลในการค้นหา-ต่อต้าน kmditempath

ทางเลือกที่เป็นไปได้บางส่วนถูกกล่าวถึงที่นี่:

วิธีที่จะหา-a-ไฟล์ในสปอตไลโดยใช้โฟลเดอร์และชื่อไฟล์


1
ขอบคุณ แต่ฉันมีฟังก์ชั่นบรรทัดคำสั่งที่ดึงไฟล์ที่ฉันสนใจแล้วและฉันกำลังสร้างโฟลเดอร์สมาร์ทไม่ใช่ทำการค้นหาที่น่าสนใจ ฉันเจอข้อ จำกัด ของ mkdItemPath แล้ว
km6zla

Spotlight Search และ Smart Folders ใช้กลไกภายในเดียวกัน kMDItemPath จะไม่ทำงานในอินเทอร์เฟซผู้ใช้อย่างใดอย่างหนึ่งเหล่านี้
GraniteRobert

1

มีวิธีแก้ไขปัญหา แต่ก็ไม่สวยมาก อย่างไรก็ตามจะให้บริการตามวัตถุประสงค์ของคุณหากคุณต้องการเข้าถึง README ของคุณในโฟลเดอร์เดียว (โดยใช้เกณฑ์ที่คุณระบุไว้) และมีความคิดว่ามาจากไหน

แนวคิดคือการใช้ shell script ของคุณเพื่อค้นหาไฟล์ที่ถูกต้องแล้วรวบรวม aliases ไปยังแต่ละไฟล์ในไดเรกทอรีเดียว จากนั้นเราจะเปลี่ยนชื่อนามแฝงเพื่อบอกให้เราทราบว่าพาเรนต์ไฟล์ต้นฉบับนั้นอยู่ในไดเรกทอรีใด

Applescript ในการทำเช่นนี้อยู่ด้านล่าง มันดูน่าเกลียดที่นี่ แต่ลองวางลงใน Script Editor และคอมไพล์แล้วคุณควรจะเห็นตรรกะ

--- Set up the name of the folder to contain search results
set myFolder to POSIX file "/Users/me/SmartFolder"

--- Clear the folder of contents. Then we will see only the results of an updated search
tell application "Finder"
    display dialog "WARNING. This will delete all files below " & (POSIX path of myFolder) & " . Are you sure you want to continue?"
    delete (every item of folder myFolder)
    --- alternatively, if you want to keep your script in the same folder, replace the line above with
    --- delete ((every item of folder myFolder) whose name does not end with ".scpt")
end tell

--- The shell command that is doing all the searching
set FileList to do shell script "find /Users/me/Documents -type f -name README.md -not -path '*/node_modules/*'"

--- The rest of the script takes each file and makes an alias in our folder containing search results. The aliases are renamed according to "ParentDirectory_filename"
set FileList to paragraphs of FileList
repeat with CurrentFile in FileList
    set ASCurrentFile to POSIX file CurrentFile
    set PathList to words of (ASCurrentFile as string)
    --- Make the new name include the Parent Directory and file name
    set NewName to (item -2 of PathList) & "_" & (item -1 of PathList)
    tell application "Finder"
        make new alias file at myFolder to ASCurrentFile
        --- We need to save the name/location of the new alias file before we can try to rename it
        set NewAlias to result
        set i to 1
        repeat
            try
                --- Try to rename the alias. Won't work if there's already an alias with the new name
                set name of NewAlias to NewName
                exit repeat
            on error
                --- Append a number to the alias. Increase the number for more duplicates
                if i is not equal to 1 then
                    set NewName to text 1 thru -3 of NewName
                end if
                set NewName to NewName & " " & i
                set i to (i + 1)
            end try
        end repeat
    end tell
end repeat

ฉันไม่รู้ว่าใช้งานได้หรือไม่ +1 เพื่อให้ได้มากับมัน ฉันไม่อยากไปไกลขนาดนี้เพื่อสร้างโฟลเดอร์ readme
km6zla
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.