Est-il possible d'ajouter gzip (ou toute autre commande en ligne de commande) en tant qu'option lorsque vous cliquez avec le bouton droit de la souris sur des fichiers dans le Finder ? Il existe une option "Compresser", mais elle produit un zip.
Réponse
Trop de publicités?Vous pouvez utiliser l'application Automator pour créer une action rapide, qui peut exécuter gzip (ou toute autre commande en ligne de commande) en tant qu'option lorsque vous cliquez avec le bouton droit de la souris sur des fichiers ou des dossiers dans l'application Finder. L'action rapide doit être stockée sous la forme d'un fichier .workflow
dans votre ~/Library/Services
dossier. Voici un exemple où le dossier gzip -r
peut être exécutée sur les fichiers sélectionnés. L'AppleScript peut être modifié pour exécuter d'autres commandes.
Note : Cet exemple a été réalisé avec MacOS Monterey version 12.5. J'ai également testé avec MacOS High Sierra version 10.13.6. Avant macOS Mojave version 10.14, les actions rapides sont désignées sous le nom de services.
L'AppleScript peut sembler long, mais il présente les caractéristiques suivantes :
- Une boîte de dialogue contextuelle invite l'utilisateur à confirmer avant d'exécuter la commande.
- Un message contextuel s'affiche lorsqu'une erreur se produit. Ce message est actuellement tronqué à 2000 caractères.
- Les messages d'erreur complets peuvent être visualisés à l'aide de l'application Console.
- L'application Finder met à jour la fenêtre contenant les fichiers sélectionnés après avoir exécuté la commande.
L'image ci-dessous montre comment l'action rapide est configurée dans l'application Automator.
Vous trouverez ci-dessous l'AppleScript qui apparaît partiellement dans l'image ci-dessus.
to truncateReturns from userstring
repeat while (userstring ends with return)
if userstring = return then return ""
set userstring to text from beginning to item -2 of userstring
end repeat
return userstring
end truncateReturns
to replaceCharacters of userstring over maxlength by endstring
if userstring ends with return then
set userstring to truncateReturns from userstring
end if
if length of userstring > maxlength then
set userstring to (text from beginning to item maxlength of userstring)
set userstring to (truncateReturns from userstring) & endstring
end if
return userstring
end replaceCharacters
on finderLogger(input)
set logger to "printf"
repeat with listitem in input
set liststr to listitem as string
if liststr = "<date>" then
set liststr to (do shell script "date +'%Y-%m-%d %H:%M:%S'" as string)
end if
set logger to logger & " " & quoted form of liststr
end repeat
set logger to logger & " >> ~/Library/Logs/Finder.log"
set stdout to do shell script logger
return stdout
end finderLogger
to fileInfo for thelink given following:followingBoolean
set thequoted to quoted form of thelink
if followingBoolean is false then
set cmd to "if [ -L " & thequoted & " ];then echo LNK;fi"
set followingBoolean to (do shell script cmd) is not "LNK"
end if
if followingBoolean is false then
set linkFolderHFS to (do shell script "dirname " & thequoted) as POSIX file as text
set linkFileHFS to (do shell script "basename " & thequoted) as POSIX file as text
tell application "Finder" to set thefile to file linkFileHFS of folder linkFolderHFS
else
set linkFullHFS to thelink as POSIX file as text
tell application "Finder" to set thefile to alias linkFullHFS
end if
return thefile
end fileInfo
on run {input, parameters}
set cmd to "gzip -r"
set messagetext to "Do you want run gzip on"
set wait to 3600
set maxlength to 2000
considering numeric strings
if system version of (system info) < "10.14" then
set workflowname to "service gzip"
else
set workflowname to "quick action gzip"
end if
end considering
try
set filecount to count of input
if filecount = 0 then error "The list of items was empty."
set filelist to ""
set fullpath to ""
repeat with currentfile in input
set fullpath to POSIX path of currentfile
if length of fullpath > 1 and text -1 of fullpath = "/" then
set fullpath to text 1 thru -2 of fullpath
end if
set filelist to filelist & " " & quoted form of fullpath
end repeat
if filecount is not equal to 1 then
set messagetext to messagetext & " " & filecount & " items?"
else
set fullinfo to fileInfo for fullpath without following
set displayname to displayed name of fullinfo
set filekind to kind of fullinfo
set messagetext to messagetext & return & "“" & displayname & "” " & filekind & "?"
end if
tell application "Finder"
activate
with timeout of wait + 100 seconds
set status to display dialog messagetext buttons {"Stop", "Continue"} with icon caution giving up after wait
end timeout
end tell
if gave up of status then error "Time out occurred after wait for Continue button to selected."
if button returned of status is not equal to "Continue" then return input
set fullcommand to cmd & filelist & " 2>&1"
set stdout to do shell script fullcommand
on error errmsg number errnum
try
finderLogger({"%s %s: %s\\n", "<date>", workflowname, errmsg})
error (replaceCharacters of errmsg over maxlength by "…")
on error errmsg number errnum
tell application "Finder"
activate
with timeout of wait + 100 seconds
display alert errmsg as critical giving up after wait
end timeout
end tell
end try
end try
try
tell application "Finder"
activate
tell front window
update every item with necessity
end tell
end tell
end try
return input
end run
L'image ci-dessous montre un message d'erreur apparaissant dans le journal du Finder.
Vous trouverez ci-dessous les images correspondantes tirées de la version 10.13.6 de MacOS High Sierra.