Commande Terminal sur un dossier depuis finder

modhack

Membre confirmé
13 Novembre 2021
24
0
54
Bonjour,

Je souhaiterais pouvoir effectuer la commande terminal suivante en ayant un raccourcis depuis finder si je fais un clcik droit sur le dossier.

Bloc de code:
mqsquashfs "./le nom du dossier" "le nom du dossier.squashfs" -comp zstd

Simple a mettre en place ?
Merci bcp pour votre aide
 
Bonjour,

Avec automator, créer un service (qui s'appelle action rapide).
Dans automator 1 action --> Exécuter un script shell et y coller ta commande.
 
Si tu crées une action lors du clic droit sur le dossier, le dossier est passé en argument à la commande. Tu as juste besoin d'entrer la commande dans le script !
 
J'essaye de comprendre, mais je vois pas.
La commande va squashfs le dossier, et doit utiliser le nom de dossier comme nom de fichier .squash

Il faut bien que j'ai la variable "nom du dossier" pour que je puisse la coller dans les 2 endroits de la commande terminal
 
Mais as-tu vérifié si cette commande existe sur macOS, il me semble que c'est une commande purement linux ?
cette commande est censée faire quoi ?

Que veux-tu faire exactement ?
 
Mais as-tu vérifié si cette commande existe sur macOS, il me semble que c'est une commande purement linux ?

Que veux-tu faire exactement ?

Oui c'est une commande linux (installée via brew) et je l'utilise tous les jours , j'aimerais juste automatiser l'ajout du nom de dossier et de pouvoir le faire depuis le finder.

la commande que j'ai montré plus haut va creer une image squashfs (l'équivalent d'un .iso par ex) du dossier. Pour cela je lui indique "le path du dossier", "le nom du fichier" en sortie (.squashfs) et la méthode de compression "-comp zsdt"
 
Cette commande n'étant pas installé sur mes machines, je ne peux pas tester.

Le principe d'un service (via le clic droit) est d' exécuter le script qui suit, au dossier sur lequel le clic droit à été exécuté !
 
Peut être un applescript !
Tu veux que lors d"un clic droit sur un dossier, tu choisisses ton service, et que cela te demande de saisir le nom du fichier de sortie et le mode de compression ?
c'est bien cela ?
 
Si par service tu entends le binaire de squashfs oui c'est bien ca, mais il faudrait que le nom du fichier de sortie soit automatiquement nommé comme le nom du dossier (le mode de compression sera toujours le meme)
 
En faite j'imaginais qu'en faisant un clique droit sur le dossier ca prends la variable $nom-du-dossier
Et ensuite cela lance dans un terminal : mquashfs "./$nom-du-dossier" "$nom-du-dossier.squashfs" -comp zsdt
 
Cela doit pouvoir se faire avec un applescript qui sera exécuté dans une action automator.

En gros, lors du clic droit sur ton dossier, tu vas dans service et tu choisis ton service.
Dans automator on récupère le path du dossier, et on le transmet à un applescript qui exécute ta commande avec en paramètre le path du dossier, le nom du fichier qui sera formé avec le nom du dossier plus l'extension ".squashfs" et le mode de compreesion. "-comp zstd"
 
Pour tester!

Dans automator tu fais nouveau document et tu choisis (action rapide)
Dans la fenêtre qui s'ouvre tu modifie l'action qui est là comme la capture d'écran ci-dessous
Capture d’écran 2021-11-13 à 18.41.54.png

et je te met le script pour pouvoir faire un copié collé.
Bloc de code:
on run {input, parameters}
    set ledossier to input as string
    set aa to ledossier as string
    set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
    set AppleScript's text item delimiters to {":"} --récupère la partie avant le dernier "."
    set nomcourt to (text item -2 of aa) as string
    set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
    set guil to ASCII character 34
    display dialog "mqsquashfs " & guil & quoted form of POSIX path of ledossier & guil & " " & guil & nomcourt & ".squashfs" & guil & " " & "-comp zstd"
    
    do shell script "mqsquashfs " & guil & quoted form of POSIX path of ledossier & guil & " " & guil & nomcourt & ".squashfs" & guil & " " & "-comp zstd"
    
    return input
end run

tu enregistres sous le nom qui te conviens
(le chemin d'enregistrement est automatique--> dans ta bibliothèque utilisateur dans le dossier services)

Et tu pourras faire un essai : le script t'affiche a l'écran la commande qu'il va envoyer au terminal (c'est pour que tu puisses vérifier), tu valides et c'est tout.

si c'est bon , il suffira de supprimer l'affichage en supprimant la ligne:
display dialog "mqsquashfs " & guil & ledossier & guil & " " & guil & nomcourt & ".squashfs" & guil & " " & "-comp zstd"

ne connaissant pas la syntaxe de ta commande, j’ai juste renseigné le nom du fichier de sortie, il faut peut être le path complet ?

Edit: je viens de remplacer le script à copier coller (qui sera donc différent de la capture d'écran) car j'avais laissé le chemin du dossier au format macOS (séparateur= :) au lieu du format Unix (séparateur = /).
 
Dernière édition:
C'est top de ta parts :) on est pas loin , j'ai du modifier le path car sinon il reconnait pas le chemin de la commande mksquashfs

Bloc de code:
on run {input, parameters}
    set ledossier to input as string
    set aa to ledossier as string
    set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
    set AppleScript's text item delimiters to {":"} --récupère la partie avant le dernier "."
    set nomcourt to (text item -2 of aa) as string
    set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
    set guil to ASCII character 34
    display dialog "mksquashfs " & guil & quoted form of POSIX path of ledossier & guil & " " & guil & nomcourt & ".squashfs" & guil & " " & "-comp zstd"
    
    do shell script "/opt/homebrew/Cellar/squashfs/4.5/bin/mksquashfs " & guil & quoted form of POSIX path of ledossier & guil & " " & guil & nomcourt & ".squashfs" & guil & " " & "-comp zstd"
    
    return input
end run

Le pb maintenant c'est qu'il me donne le path complet du dossier, hors, juste le ./ suffit dans la commande, et c'est meme nécessaire car sinon ca sera pas possible de le monter sur d'autres systemes.
 
Ok peux-tu me donner une exemple de chemin?
Ou mieux un exemple complet de commande, je modifierai le script !
 
Puis ca bloque dessus

Bloc de code:
L’action « Exécuter un script AppleScript » a rencontré une erreur : « Cannot stat source directory "'/Volumes/share/le-dossier-a-squash/'" because No such file or directory »
 
Donne moi la commande exacte telle que tu la met dans le terminal et qui fonctionne !
je ferais les modifs...
 
Je dois me placer au niveau du dossier ou se trouve le dossier que je souhaite squash
Ensuite je fais cela (avec le path complet)

Bloc de code:
/opt/homebrew/Cellar/squashfs/4.5/bin/mksquash "./mondossier" "mondossier.squashfs" -comp zsdt
 
nouveau script
a essayer

Bloc de code:
on run {input, parameters}
    set ledossier to input as string
    set aa to ledossier as string
    set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
    set AppleScript's text item delimiters to {":"} --récupère la partie avant le dernier "."
    set nomcourt to (text item -2 of aa) as string
    set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
    set guil to ASCII character 34
    
    set macommande to "/opt/homebrew/Cellar/squashfs/4.5/bin/mksquash " & guil & "./" & nomcourt & guil & " " & guil & nomcourt & ".squashfs" & " " & "-comp zstd"
    display dialog macommande
    
    do shell script macommande
    
    return input
end run