Фільтр розумних папок "не містить"


13

Розумна папка Виключіть папку

Зрештою, я хочу, щоб результат цієї команди знайшов розумну папку.

Критерії не такі складні:

  • назва має бути "README.md"
  • тип має бути файлом
  • шлях не повинен містити "node_modules"

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

Проблема полягає в тому, що у списку операторів критеріїв розумних папок, здається, немає does not containможливості.

Доступні варіанти:

  • сірники
  • містить
  • починається з
  • закінчується на
  • є
  • не

Чи можливо це досягти і якщо так, то як?

Редагуйте 1

Я виявив, що, утримуючи клавішу опції, я можу додати застереження за запереченням критеріям пошуку смарт-папок, але я не можу успішно виключити папку node_modules. Незрозуміло, які критерії використовувати, але, здається, не працює жоден із тих, кого я намагався:

  • Контейнер для документів
  • Містять імена папок
  • Назва папки

Я спробував комбінувати їх із наступними операторами:

  • містить
  • сірники

та з наступними умовами:

  • вузли_модулі
  • вузли_модулі

на випадок, якщо він підтримує підстановку.

Я спробував усі комбінації перерахованих вище фільтрів, операторів та термінів.

Документація з цього питання настільки бідна.

введіть тут опис зображення


2
Ви знайшли рішення?
gota

Відповіді:


2

Схоже, kMDItemPath не може робити те, що потрібно:

немає результатів-в-промінь-в-пошуку-проти-kmditempath

Тут обговорюються деякі можливі альтернативи:

як-знайти-файл-в-промінь-використання-папка-і-файл-ім'я


1
Дякую, але у мене вже є функція командного рядка, яка витягує цікаві мені файли, і я роблю Smart Folder, не роблячи пошуку уваги. Я натрапив на обмеження mkdItemPath.
км6зла

Пошук прожектора та смарт-папки використовують один і той же внутрішній механізм. kMDItemPath не працюватиме в жодному з цих інтерфейсів користувача.
GraniteRobert

1

Існує рішення, але це не дуже красиво. Однак він буде служити вашим цілям, якщо ви просто хочете отримати доступ до своїх README в одній папці (використовуючи вказані вами критерії) і мати деяке поняття, звідки вони беруться.

Ідея полягає у використанні сценарію оболонки для пошуку потрібних файлів, а потім збирають псевдоніми кожного файлу в одному каталозі. Потім ми перейменовуємо псевдоніми, щоб повідомити нам, до якої батьківської директорії належить оригінальний файл.

Апскрипт для цього наведено нижче. Тут це виглядає некрасиво, але спробуйте вставити його в редактор сценаріїв і скласти його, і ви повинні мати можливість бачити логіку.

--- 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.