Bộ lọc thư mục thông minh, không chứa


13

Thư mục thông minh Loại trừ thư mục

Cuối cùng, tôi muốn kết quả của lệnh find này là một thư mục thông minh.

Các tiêu chí không phức tạp:

  • tên phải là "README.md"
  • loại nên được tập tin
  • đường dẫn không được chứa "node_modules"

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

Vấn đề là danh sách các nhà điều hành tiêu chí thư mục thông minh dường như đang thiếu một does not containtùy chọn.

Các tùy chọn có sẵn là:

  • diêm
  • chứa đựng
  • bắt đầu với
  • kết thúc bằng
  • không phải

Có thể thực hiện được điều này và nếu vậy thì làm thế nào?

Chỉnh sửa 1

Tôi thấy rằng bằng cách giữ phím tùy chọn, tôi có thể thêm mệnh đề phủ định vào tiêu chí tìm kiếm thư mục thông minh nhưng dường như tôi không thể loại trừ thành công thư mục node_modules. Không rõ tiêu chí nào để sử dụng nhưng không có tiêu chí nào tôi đã thử dường như hoạt động:

  • Container tài liệu
  • Chứa tên thư mục
  • Tên thư mục

Tôi đã thử kết hợp những thứ này với các toán tử sau:

  • chứa đựng
  • diêm

và với các điều khoản sau:

  • nút_modules
  • nút_modules

trong trường hợp nó hỗ trợ tìm kiếm ký tự đại diện.

Tôi đã thử tất cả các kết hợp của các bộ lọc, toán tử và thuật ngữ ở trên.

Các tài liệu rất kém về chủ đề này.

nhập mô tả hình ảnh ở đây


2
Bạn đã tìm thấy một giải pháp?
gota

Câu trả lời:


2

Có vẻ như kMDItemPath không thể làm những gì bạn cần:

không có kết quả trong ánh đèn sân khấu trong tìm kiếm so với kmditempath

Một số lựa chọn thay thế tiềm năng được thảo luận ở đây:

how-to-location-a-file-in-spotlight-used-library-and-file-name


1
Cảm ơn nhưng tôi đã có chức năng dòng lệnh truy xuất các tệp tôi quan tâm và tôi đang tạo Thư mục thông minh, không thực hiện tìm kiếm nổi bật. Tôi đã đi qua giới hạn của mkdItemPath.
km6zla

Spotlight Search và Smart Folders sử dụng cùng một cơ chế nội bộ. kMDItemPath sẽ không hoạt động trong cả hai giao diện người dùng này.
GranitRobert

1

Có một cách giải quyết, nhưng nó không đẹp lắm. Tuy nhiên, nó sẽ phục vụ mục đích của bạn nếu bạn chỉ muốn truy cập README của mình trong một thư mục (sử dụng tiêu chí bạn đã chỉ định) và có một số khái niệm về nơi chúng đến.

Ý tưởng là sử dụng tập lệnh shell của bạn để tìm đúng tệp, sau đó thu thập bí danh cho mỗi tệp trong một thư mục. Sau đó chúng tôi đổi tên các bí danh để cho chúng tôi biết thư mục gốc của tập tin gốc là gì.

Applescript để làm điều này là dưới đây. Nó trông xấu xí ở đây, nhưng hãy thử dán nó vào Script Editor và biên dịch nó, và bạn sẽ có thể thấy logic.

--- 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

Tôi không biết nếu nó hoạt động. +1 cho thậm chí đến với nó. Tôi không sẵn sàng đi xa đến mức này để tạo một thư mục readme.
km6zla
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.