4 votes

fichier gzip dans le finder

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.

3voto

David Anderson Points 30783

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.

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

Monterey console


Vous trouverez ci-dessous les images correspondantes tirées de la version 10.13.6 de MacOS High Sierra.

High Sierra automator

High Sierra console

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X