macOS Ventura copie fichier dans dossier caché sur un volume externe (liseuse Kobo)

  • Créateur du sujet Créateur du sujet ange
  • Date de début Date de début

ange

Membre actif
24 Janvier 2005
400
13
Vercors
Bonjour,
je voudrais faire un script me permettant de copier un fichier donné (un dictionnaire) sur une kobo.
Typiquement, actuellement, je passe par le terminal avec lequel je tape :
cp ~/dicthtml-fr-fr.zip /Volumes/KOBOeReader/.kobo/custom-dict/dicthtml-fr-fr.zip

=> Quel est le moyen de faire le script/raccourci dans le finder me permettant d'automatiser cela ? Script ? Raccourci ? (je ne vois pas comment accéder au dossier caché de la kobo par exemple...)

Merci d'avance
Ange
 
Bonjour,

Je ne possède pas de liseuse kobo, mais si ta commande fonctionne dans le terminal , il doit suffire de l'inclure dans un applescrit.

Si le chemin "/Volumes/KOBOeReader/.kobo/custom-dict/nom_du_fichier" est toujours le même , l'inclure dans le script, sinon, dans le script faire une demande de choix de dossier avec l'option "invisibles".

le script te demande:
1 - choisir le fichier à copier
2 - choisir le dossier "invisible ou pas" de destination
3 - exécute la commande "cp ......."
 
Bonjour, j'ai aussi une liseuse Kobo, tu peux effectivement faire un applescript du genre :

Bloc de code:
set dico to "\"" & POSIX path of (choose file) & "\""
do shell script "cp " & dico & " /Volumes/KOBOeReader/.kobo/custom-dict"
Vu que le chemin du dossier de destination ne change jamais, ce n'est pas la peine de le demander dans le script. En ne mettant pas le nom du fichier mais juste le dossier de destination ça te permet d'ajouter n'importe quel dictionnaire, le nom sera copié à l'identique.
 
  • J’aime
Réactions: zeltron54
Merci pour ces retours, pile poil ce que je cherchais.
Je vais voir à faire un script plus complet, que je publierai ici, une fois que j'aurai trouvé comment modifier une chaine de caractères en applescript... (dict-fr-fr en dict-fr). D'ailleurs quel est, selon vous, le meilleur site d'applescript expliquant (en FR ?) les fonctions d'applescript par type ?
 
Il y a l'Apple Script Langage Guide d'Apple, mais c'est en anglais. Sinon pour le renommage le plus simple est de le faire avec un shell script. Dans l'exemple du message #3, il suffit de rajouter le nom de fichier désiré à la fin, ce qui donne :

Bloc de code:
set dico to "\"" & POSIX path of (choose file) & "\""
do shell script "cp " & dico & " /Volumes/KOBOeReader/.kobo/custom-dict/dicthtml-fr.zip"
 
Merci @sinbad21
J'ai travaillé dessus et voici mon code final, avec un peu de protection et à enregistrer sous format d'application si besoin est...
Ange

AppleScript:
(*
    Script de copie d'un dictionnaire Kobo dans le(s) bon(s) dossier(s)
    @Ange - 16 Août 2023
    ! : pas de vérification qu'il s'agit bien d'un dictionnaire
    sources dico Wikitionniaire :
    * https://www.tiger-222.fr/?d=2020/04/17/22/14/21-un-dictionnaire-alternatif-et-complet-pour-votre-kobo
    * https://github.com/BoboTiG/ebook-reader-dict/tree/master/docs/fr
*)
-- La vraie fonction de copie
on install_dico(nom, nommodifie, chemin)
    try
        do shell script "cp " & nom & " " & chemin & nommodifie
        -- display dialog "cp " & nom & " " & chemin & nommodifie
    on error the error_message number the error_number
        display dialog "Error: " & the error_number & ". " & the error_message buttons {"OK"} default button 1
    end try
    -- display dialog "nom : " & nom
    set liste to every word of nom as list
    set nomcourt to item -2 of liste & "-" & item -1 of liste
    -- display dialog "nomcourt : " & nomcourt
    return nomcourt
end install_dico

-- fonctions pour modifier le nom
on findAndReplace(tofind, toreplace, TheString)
    set ditd to text item delimiters
    set text item delimiters to tofind
    set textItems to text items of TheString
    set text item delimiters to toreplace
    if (class of TheString is string) then
        set res to textItems as string
    else -- if (class of TheString is Unicode text) then
        set res to textItems as Unicode text
    end if
    set text item delimiters to ditd
    return res
end findAndReplace

on modifie_nom(nomdico)
    -- display dialog "nomdico: " & nomdico
    set nom_modifie to findAndReplace("-fr-fr", "-fr", nomdico)
    -- display dialog "nomdico: " & toto
    return nom_modifie
end modifie_nom

-- 0) Initialisation Valeurs
set chemincustom to "/Volumes/KOBOeReader/.kobo/custom-dict/"
set cheminbase to "/Volumes/KOBOeReader/.kobo/dict/"

-- 1) vérification présence Kobo
try
    do shell script "ls " & chemincustom
on error the error_message number the error_number
    display dialog "Erreur " & the error_number & " : aucune Kobo connectée, merci d'en connecter une !" buttons {"Quitter"} default button 1
    return
end try


-- 2) sélection du fichier
display dialog "Sélectionner le fichier dictionnaire (ex: dicthtml-fr-fr.zip)"
set nomdico to (choose file)
set dico to "\"" & POSIX path of nomdico & "\""
-- display dialog "nom ref : " & dico

-- vérification extension zip
set liste to every word of dico as list
set val to (count of liste)
set nomcourt to last item of liste
set listelettres to every character of nomcourt as list
set extension to item -3 of nomcourt & item -2 of nomcourt & item -1 of nomcourt
-- display dialog "val : " & val & " extension:" & extension
if extension is not "zip" then
    display dialog "Le fichier doit être un fichier zip" buttons {"Quitter"} default button 1
    return
end if

-- 3) Demander si installation du dico utilisateur(0) ou dico kobo(1) ou les deux (2)
set nomdicocourt to item -3 of liste & "-" & item -2 of liste & "-" & item -1 of liste
display dialog "Souhaitez-vous installer \"" & nomdicocourt & "\" :
  1) uniquement comme dictionnaire perso ?
  2) ou également comme dictionnaire de base Kobo ? " buttons {"1", "2", "Annuler"} default button 3
set the button_pressed to the button returned of the result

-- 4) Actions
set Info to ""
set InfoS to ""
if the button_pressed is "Annuler" then
    return
else if the button_pressed is "2" then -- dico Kobo
    set nommodifie to modifie_nom(nomdicocourt)
    set Info to " & " & install_dico(dico, nommodifie, cheminbase)
    set InfoS to "s"
end if
set nomcourt to install_dico(dico, "", chemincustom)

-- 5) Affichage résultat
display dialog "Dictionnaire" & InfoS & " " & nomdicocourt & Info & " installé" & InfoS buttons {"Quitter"} default button 1
 
Pratique, ça va me servir. D'après ce que j'ai pu constater :

- Un dictionnaire doit commencer par dicthtml- pour être pris en compte, sinon on ne le voit pas sur le Kobo. Si par exemple je copie mondico.zip dans le dossier dict ou le dossier custom.dict, je ne le vois pas sur le Kobo. Si par contre je l'appelle dicthtml-mondico.zip, je le vois sous ce nom-là.

- Du coup quand on affiche sur le Kobo la liste des dictionnaires, il apparaît avec ce préfixe dicthtml- et je n'ai pas trouvé le moyen de virer ce préfixe disgracieux à l'affichage. Le suffixe .zip heureusement n'est pas affiché, c'est déjà ça.

- J'ai essayé ton script avec l'option 2 mais dans ce cas-là il copie le dictionnaire deux fois, une fois dans le dossier dict, préfixé par le dossier du Mac contenant le dico (Desktop-dicthtml-mondico.zip), et il le copie également dans custom-dict, sous le nom dicthtml-mondico.zip cette fois. Sur le Kobo le fichier préfixé par Desktop- est tout simplement ignoré.
 
En effet, tu trouveras les informations sur la grammaire des noms des dicos Kobo dans les 2 liens que j'ai mis dans la cartouche en commentaire au début du code...
 
En effet, tu trouveras les informations sur la grammaire des noms des dicos Kobo dans les 2 liens que j'ai mis dans la cartouche en commentaire au début du code...
Oui j'ai vu. Bonne idée de mentionner ces liens dans le script.