[Feature Request]: Reveal in Finder for multiple files

Discuss new features and functions
Posts: 7
Joined: 15 May 2023

ClutterCutter

When comparing two folders on macOS there's a right-click option to "Reveal in Finder".

If multiple files are selected, however, only the first one is selected in the Finder window.

It would be fantastically useful to have them all selected so that you can easily use Quick View with them, or batch rename them, or perform other actions (even just see them in context).

It's possible to work around this by exporting the list and then using a command line script for the selection eg. this applescript suggestion or this little Swift app, but that's very long-winded.

I hope this is a feature enhancement that might be considered for adoption.
Posts: 943
Joined: 8 May 2006

therube

(I don't know Mac, but...)
You might be able to set something up yourself?


Tools | Options -> Customize context menu:

Descr.
Open in Finder

Command line
Finder "%local_path%" "%local_path2%"


(now I have no idea if "Finder" is finders name, nor if any other parameters may need to be passed to it, but experiment & see if you can get something to work?)
Posts: 7
Joined: 15 May 2023

ClutterCutter

Ah, clever!
New user, so didn't know that's how it worked.
(The option is at the bottom of Preferences on Mac, rather than under Tools.)

I'm not sure how to craft a solution with it, though...

The %local_path% macro doesn't pass a list or array, just a single file. So in the case of a multiple-file selection, the command is simply iterated that number of times.

If, for instance, you set up the following command
osascript -e 'display dialog "%local_path%" with title "FFS Context Menu Test"'
you get presented with a new dialog box for each file in sequence after clicking OK each time, and if you click Cancel the execution stops.

Similarly, if you choose "Open with default application" for image files, Preview opens multiple separate windows rather than a single window with all the images in a sidebar (as it would do if passed a list).

So would need to capture the filenames/paths...
User avatar
Site Admin
Posts: 7052
Joined: 9 Dec 2007

Zenju

For the record: FreeFileSync can also preview images. Right-click on column header and select "medium" icon size.
Posts: 7
Joined: 15 May 2023

ClutterCutter

For the record: FreeFileSync can also preview images. Right-click on column header and select "medium" icon size. Zenju, 16 May 2023, 09:33
That is really useful, and your application overall is unbelievably brilliant!

Still, I wanted to be able to have the selected items transferred across to a finder view...

So the following is the best I have been able to come up with.

If it's possible to add a "macro" that provides all the filenames as an array or list then I think the solution could lie with osascript within the existing terminal command paradigm.

However, for the time being the combination of a text file and this simple Applescript app does work and is reasonably robust, although it is excruciatingly slow. (Previously, I thought it would be even more cumbersome because I had only found the export to Excel feature, so the bash integration is great.) Hopefully it may help somebody else.

So, I added a Context Menu option to generate a text file of the filenames and save it at the bottom of the user's Home folder (alphabetically,) as suggested in the manual:
Write out list of filenames to txt file
echo %item_name% >> ~/zz_FreeFileSync_file_list_%Date%-%Time%.txt
Then this Applescript, saved as an app, prompts the user to select that file list and provide the parent folder path (which can be copied directly from FFS or dragged in from the Finder). Eventually a Finder window appears with all the files selected! Or doesn't, if something's wrong.

No doubt it could be vastly improved, but it does the job for my fully controlled needs and doesn't blow up... probably... I haven't tested with a large number of files or anything...
# FreeFileSync Reveal in Finder Multiple Selection Tool

set theFreeFileSyncFileList to choose file with prompt "Please select the file_list text file generated via FreeFileSync's context menu using the <echo %item_name% >> ~/zz_FreeFileSync_file_list_%Date%-%Time%.txt> command:" of type "txt" default location (path to home folder)

set thePathResponse to display dialog "What is the full path (without quotes) of the parent folder for these files? Simply copy & paste it from the top of the relevant FreeFileSync pane." default answer "" with icon note buttons {"Cancel", "Continue"} default button "Continue"

set parentFolder to text returned of thePathResponse

set activeFolder to POSIX file parentFolder

on returnFileContentsAsArray(theFile)
    set fileHandle to open for access theFile
    set theItems to paragraphs of (read fileHandle)
    close access fileHandle
    return theItems
end returnFileContentsAsArray

set theFilesOfInterest to returnFileContentsAsArray(theFreeFileSyncFileList)

tell application "Finder"
   
    activate
   
    set multiSelection to items of folder activeFolder whose name is in theFilesOfInterest
   
    reveal multiSelection
   
end tell
User avatar
Site Admin
Posts: 7052
Joined: 9 Dec 2007

Zenju

More food for thought:

The simplest command to show a single file in Finder is the following, but it doesn't work with multiple file paths:
open -R "%local_path%"

Here's an equivalent command using osascript:
osascript -e 'tell application "Finder" to reveal POSIX file "%local_path%"'

And a variant for two files that maybe could be generalized to show any number of files:
osascript -e 'tell application "Finder" to reveal every item in {POSIX file "/folder/file1", POSIX file "/folder/file2"}'
Posts: 7
Joined: 15 May 2023

ClutterCutter

Yes, indeed:
If it's possible to add a "macro" that provides all the filenames as an array or list then I think the solution could lie with osascript within the existing terminal command paradigm. ClutterCutter, 16 May 2023, 15:01
But I can't see how to get the list of files without a new eg. %items_list% macro, because there's no way to set up a persistent variable in memory to append them to if the whole command is executed for each file sequentially.
User avatar
Site Admin
Posts: 7052
Joined: 9 Dec 2007

Zenju

But I can't see how to get the list of files without a new eg. %items_list% macro, because there's no way to set up a persistent variable in memory to append them to if the whole command is executed for each file sequentially. ClutterCutter, 20 Jun 2023, 19:19
I've solved that part: "%local_paths%" etc. would resolve to all selected paths. Multiple identical command lines (after path resolution) would be aggregated to only one. This means there would be only a single command line execution for multiple files.

Remaining question:
How could %local_paths% ever resolve to something like this?
{POSIX file "/folder/file1", POSIX file "/folder/file2"}'
Perhaps this is where FFS finally must call a script and pass the list of files as arguments.
Posts: 7
Joined: 15 May 2023

ClutterCutter

Ah, I see. Well, the script can be constructed via osascript: it takes multiple -e statements, so a multi-line script can be built and be quite sophisticated.

Might be best to separate the folder and the items, as I did in my script above, which was based on this comment.

If the %item_names% macro expands correctly on the command line, it can go straight into an applescript list. Delimiters are flexible.
User avatar
Site Admin
Posts: 7052
Joined: 9 Dec 2007

Zenju

The following macros have been added for the next version:
%item_paths%
%local_paths%
%item_names%
%parent_paths%
Details can be found here:
https://freefilesync.org/manual.php?topic=external-applications

Here's the current beta version for testing:
https://www.mediafire.com/file/1ezuvynauq3xtyz/FreeFileSync_12.5_%255BBeta%255D_Windows_Setup.exe
https://www.mediafire.com/file/ent5k2bxp7pj809/FreeFileSync_12.5_beta_macOS.zip
Posts: 7
Joined: 15 May 2023

ClutterCutter

Excellent! :)

I think I may have misled you, however. Sorry.
To generate a list including all selected items (separated by space), append "s" to the macro name
The separator may need to be a comma, actually; or the list be formed of each item on a new line.

I haven't looked at the beta as yet, and am far from an Applescript expert, but presumably the filenames/paths are output in quotes, since they may contain spaces?

Applescript's set item delimiter does indeed allow for flexibility in extracting items from a string into a list/array, but if the string itself has quotes in it there's an obvious problem in determining where it ends, so I believe this won't work:
"Filename1" "Filename2" "Filename Three" "Filename Four"
but this will (because it's the format of an Applescript list anyway):
"Filename1","Filename2","Filename Three","Filename Four"
and this will (because it can be parsed using set to paragraphs of):
Filename1
Filename2
Filename Three
Filename Four
User avatar
Site Admin
Posts: 7052
Joined: 9 Dec 2007

Zenju

In my tests the list also needed the "POSIX file" parts. So %local_paths% needs to be propagated to a script as command line arguments.
Posts: 7
Joined: 15 May 2023

ClutterCutter

I've just quickly tested this and it works (all one command line)
osascript -e 'set activeFolder to POSIX file "/Users/ClutterCutter/Pictures/Some Pictures/These Pictures/A Folder of Pictures"' -e 'set theFilesOfInterest to {"Picture1.jpg","Picture2.jpg","Picture_3.jpg","Picture Four.jpg","Picture Five.jpg","Another Picture.jpg"}' -e 'tell application "Finder"' -e 'activate' -e 'set multiSelection to items of folder activeFolder whose name is in theFilesOfInterest' -e 'reveal multiSelection' -e 'end tell'
So, in this example, would just need "%parent_path%" (quotes added on command line) to resolve to "/Users/ClutterCutter/Pictures/Some Pictures/These Pictures/A Folder of Pictures"

and

%item_names% (no quotes) to resolve to "Picture1.jpg","Picture2.jpg","Picture_3.jpg","Picture Four.jpg","Picture Five.jpg","Another Picture.jpg"