Filter folder pintar “tidak mengandung”

13

Folder Cerdas Kecualikan Folder

Akhirnya saya ingin hasil dari perintah find ini menjadi folder pintar.

Kriteria tidak terlalu rumit:

  • nama harus "README.md"
  • jenis harus berupa file
  • path seharusnya tidak mengandung "node_modules"

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

Masalahnya adalah bahwa daftar operator kriteria folder pintar tampaknya tidak memiliki does not containopsi.

Opsi yang tersedia adalah:

  • cocok
  • mengandung
  • dimulai dengan
  • berakhir dengan
  • adalah
  • tidak

Apakah mungkin untuk mencapai ini dan jika demikian, bagaimana caranya?

Edit 1

Saya menemukan bahwa dengan menahan tombol opsi, saya dapat menambahkan klausa negasi ke kriteria pencarian folder pintar, tetapi sepertinya saya tidak berhasil mengecualikan folder node_modules. Tidak jelas kriteria mana yang digunakan tetapi tidak satupun yang saya coba tampaknya berfungsi:

  • Wadah dokumen
  • Berisi Nama Folder
  • Nama folder

Saya telah mencoba menggabungkan ini dengan operator berikut:

  • mengandung
  • cocok

dan dengan ketentuan sebagai berikut:

  • node_modules
  • node_modules

dalam hal ini mendukung pencarian wildcard.

Saya telah mencoba semua kombinasi filter, operator, dan istilah di atas.

Dokumentasi sangat buruk pada subjek.

masukkan deskripsi gambar di sini

km6zla
sumber
2
Sudahkah Anda menemukan solusinya?
gota

Jawaban:

2

Sepertinya kMDItemPath tidak dapat melakukan apa yang Anda butuhkan:

tanpa hasil dalam sorotan-dalam-penelusuran-terhadap-kmditempath

Beberapa alternatif potensial dibahas di sini:

cara-mencari-file-dalam-sorotan-menggunakan-folder-dan-file-nama

GraniteRobert
sumber
1
Terima kasih tetapi saya sudah memiliki fungsi baris perintah yang mengambil file yang saya minati dan saya membuat Folder Cerdas, tidak melakukan pencarian sorotan. Saya telah menemukan batasan mkdItemPath.
km6zla
Pencarian Spotlight dan Folder Cerdas menggunakan mekanisme internal yang sama. kMDItemPath tidak akan berfungsi di salah satu antarmuka pengguna ini.
GranitRobert
1

Ada solusi, tetapi tidak terlalu cantik. Namun, itu akan melayani tujuan Anda jika Anda hanya ingin mengakses README Anda dalam satu folder (menggunakan kriteria yang telah Anda tentukan), dan memiliki gagasan dari mana mereka berasal.

Idenya adalah menggunakan skrip shell Anda untuk menemukan file yang tepat, dan kemudian mengumpulkan alias untuk setiap file dalam satu direktori. Kami kemudian mengganti nama alias untuk memberi tahu kami direktori induk mana file asli milik.

Applescript untuk melakukan ini ada di bawah ini. Kelihatannya jelek di sini, tetapi coba tempelkan ke Script Editor dan kompilasi, dan Anda harus bisa melihat logikanya.

--- 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
Delyle
sumber
Saya tidak tahu apakah ini berhasil. +1 untuk bahkan memunculkannya. Saya tidak mau melangkah sejauh ini untuk membuat folder readme.
km6zla