### L'appel de logiciels Il peut être appelé depuis Bash comme suit: ```{.bash linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"} mon_code="Dir['*'].each { |p| File.rename(p, p.downcase) }" ruby -e ${mon_code} ``` - Le script Bash écrit la chaîne de caractère qui contient le code Ruby dans la variable `mon_code`. - Ensuite, il envoie le contenu de `mon_code` à l'interpréteur du langage Ruby ### La manipulation de fichiers comme suit: ```{.bash linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"} pdftk \ page_couverture.pdf \ table_matieres.pdf \ chapitre_1.pdf \ chapitre_2.pdf \ conclusion.pdf \ cat output mon_ebook.pdf ``` - On lance le logiciel *pdftk* - Ensuite, on énumère dans l'ordre tous les fichiers à concaténer - On spécifie l'action. Le mot *cat* est souvent utilisé pour la concaténation. - On spécifie le fichier de sortie après *output*. Ici, c'est *mon_ebook.pdf* Petite note: la barre oblique *\* c'est pour couper les lignes pour les rendre plus faciles à lire ! ### Les tubes Par exemple, si je veux trouver tous les livres sur le logiciel Spark qui se trouvent dans ma bibliothèque Nextcloud, la commande Bash correspondante prend la forme suivante: ```{.bash linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"} find "nextcloud/Livres" -type f | \ grep -i "voyage|travel" ``` - Le premier argument de find est le répertoire de recherche, ici c'est `nextcloud/Livres/Technical`. - Le premier paramètre est *type*, avec comme valeur *f*, pour rechercher uniquement les fichiers. - Ensuite, il y a un tube vers la commande *grep* - *grep* a un paramètre, *-i* qui spécifie que ce qui suit n'est pas sensible à la casse (an anglais *case insentitive*) - Enfin, il y a l'expression de recherche *voyage|travel* qui va retourner tous les noms de fichiers qui contiennent soit le mot *voyage*, soit le mot *travel* ### cron sur Linux et macOS Il est aussi possible de mettre le script à exécuter dans un des 4 répertoires suivants ```{.bash linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"} /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly ``` Le comportement par défaut est d'exécuter le script à chaque minute. Ensuite, si on veut réduire la fréquence, on spécifie à quel moment exécuter le script. ### Planificateur de tâches sur Windows Une fois la commande exécutée, nous obtenons cette réponse: ```{.powershell linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"} TaskPath TaskName State -------- -------- ----- \ cocktail-aleatoire Ready ``` ### Tester avant d'exécuter ```{.bash linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"} rsync -av \ --dry-run \ --progress \ --delete \ /source/mondossier \ /destination/mondossier ``` ### Fin de l'exécution Lorsque la commande est terminée, ça va produire un sommaire comme suit: ```{.bash linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"} sent 391,414,597 bytes received 16,270 bytes 46,050,690.24 bytes/sec total size is 391,253,238 speedup is 1.00 ``` Afin de valider que la sauvegarde est bien réussie, il suffit d'exécuter à nouveau la commande. Si aucun fichier n'est synchronisé, alors c'est le cas ! ## Sur Windows Voici le code pour installer cette extension ```{.powershell linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"} Install-Module PSWindowsUpdate ``` Une fois installée, Nous allons configurer les mises à jour pour qu'elles s'installent chaque jour à 2h du matin. ```{.powershell linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"} $action = New-ScheduledTaskAction -Execute 'Get-WindowsUpdate -AcceptAll -Install -AutoReboot' $trigger = New-ScheduledTaskTrigger -Daily -At 2am Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "mise-a-jour-nocturne" ```