AppleScripted file contents search using grep

This is a workaround for the Finder insisting on starting a search of the entire HDD on every new search rather than the good ol’ days of 10.3 which was to search in the directory you were staring at. I know you can click a button to switch it, but every time? No, I like the old way better.

No per-instance recursive option, but it’s easy enough to enable it if that is your preferred method.

property search_prompt : "Enter search text."
property search_string : ""
property is_recursive : false

tell application "Finder"
try
set this_folder to folder of front window as alias
if is_recursive is false then
set the_items to name of every item of this_folder whose kind is not folder as text
else
set the_items to {""}
end if
end try
end tell

repeat
set the_search to text returned of (display dialog search_prompt default answer search_string) as text
set search_string to the_search
set the_results to "'" & the_search & "' found in these files:" & return & return
set is_found to false
repeat with i in the_items
set _grep to ""
try
set _grep to do shell script "grep -ilr '" & the_search & "' " & "'" & POSIX path of this_folder & i & "'"
end try
if _grep is not "" then
set is_found to true
set the_results to the_results & _grep & return
end if
end repeat
if is_found is true then
set what_now to button returned of (display dialog the_results buttons {"Retry", "OK"})
if what_now is "OK" then
exit repeat
end if
else
set search_prompt to "No matches."
end if
end repeat

If saved as an application you can place it in the Finder’s toolbar for easy launching.

Leave a Reply

Your email address will not be published. Required fields are marked *