スマートフォルダーフィルターは「含まない」


13

スマートフォルダー除外フォルダー

最終的に、私はこの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
解決策を見つけましたか?
下駄2015年

回答:


2

kMDItemPathが必要なことを実行できないようです:

no-results-in-spotlight-in-searches-against-kmditempath

いくつかの潜在的な代替案についてここで説明します。

スポットライトを使用するフォルダ内のファイルとファイル名を特定する方法


1
おかげで、関心のあるファイルを取得するコマンドライン関数がすでにあり、スポットライト検索ではなく、スマートフォルダーを作成しています。mkdItemPathの制限に遭遇しました。
km6zla 2014年

Spotlight SearchとSmart Foldersは同じ内部メカニズムを使用します。kMDItemPathは、これらのユーザーインターフェイスのいずれでも機能しません。
GraniteRobert 2014年

1

回避策はありますが、あまりきれいではありません。ただし、(指定した基準を使用して)1つのフォルダー内のREADMEにアクセスしたいだけで、それらがどこから来たかの概念を持っている場合は、目的に役立ちます。

アイデアは、シェルスクリプトを使用して適切なファイルを見つけ、1つのディレクトリ内の各ファイルのエイリアスを収集することです。次に、エイリアスの名前を変更して、元のファイルがどの親ディレクトリに属しているかを示します。

これを行うApplescriptは以下のとおりです。見た目は醜いですが、スクリプトエディターに貼り付けてコンパイルすると、ロジックが表示されます。

--- 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 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.