Compilation de commandes utiles régulièrement, ou pas

15 Annexes - Scripts

Attention, ces scripts sont des scripts que j’ai réalisé il y a parfois longtemps et souvent pour une utilisation unique. Il sont donc non-optimisés et potentiellement cassés. Ils ont fonctionné pour moi et fonctionnent probablement encore mais je conseille de les utiliser avec prudence pour éviter toute perte de fichiers.

15.1 Trier des fichiers par année

J’avais un gros dossier en vrac de vieilles photos, que je voulais garder mais en créant des dossiers par année pour les retrouver plus facilement. Il se trouve que l’on ne peut pas trouver dans les métadonnées la date de création mais seulement de dernière modification. J’ai reproduit ici ce script comme exemple de script simple et pour qu’il soit réutilisable.

#!/bin/bash
echo "Chemin du dossier a trier :"
read chemin
cd $chemin
ls
#Teste chaque fichier du dossier chemin
for i in *; do
        if [ -d "$i" ]; then
        #-d est l’option pour savoir si un dossier existe, ici on teste si il est utile de l’analyser ou pas
                echo "C’est un dossier"
        else
                annee=‘stat -c ’%y’ "$i" | awk -F - ’{print $1}’
                #Sort l’annee de derniere modification
                #-c utilise le format precise plutot que celui par defaut. ’%y’ date de la derniere modification d’etat en format lisible.
                #awk -F - precise que le separateur est le tiret et pas un espace
                #’{print $1}’ s’arrete d’afficher au premier separateur
                #"$i" entre guillement pour eviter les erreurs avec les espaces dans les noms
                if [ -d $annee ]; then
                        mv "$i" $annee
                else
                        mkdir $annee
                        mv "$i" $annee
                fi
        fi
done

15.2 Post-Installation automatique

Quand on veut réinstaller son ordinateur on sait généralement déjà de quoi on a besoin/envie. Et la force de GNU/Linux est de pouvoir réaliser de nombreuses étapes de post-installation automatiquement.
Celui-ci permet surtout d’installer les quelques programmes non-installés par défaut mais utiles comme les paquets pour lire les fichiers d’un téléphone android. Il permet aussi d’installer les librairies qui permettent de lire les DVD.
Si les lignes correspondantes sont décommentées, il permet d’installer VirtualBox.
Enfin, il peut être utilisé pour copier les fichiers de configuration que vous avez déjà, sous réserve de quelques modifications/ajouts pour les lignes commençants par cp -r.
Il nécessite bien entendu d’être exécuté en root ou avec sudo.

#!/bin/sh
#echo "Dossier des fichiers de config"
#read dossier
#echo "nom utilisateur/trice"
#read id
echo "Verifier que sudo est bien installe, sinon le script ne pourra pas fonctionner [O/n]"
read answer
if [ $answer = "O" ]; then
        sudo apt update
        #Utiles et dependances
        sudo apt install curl ffmpeg accountsservice git tree rsync apt-transport-https numix-gtk-theme numix-icon-theme
        #Android
        sudo apt install android-tools-adb android-tools-fastboot gvfs-backends jmtpfs libmtp-common
        #Bureautique et multimedia
        sudo apt install gthumb inkscape texmaker handbrake vlc
        #Utilitaires
        sudo apt install keepassx gnome-disk-utility
        #Internet
        sudo apt install thunderbird transmission pidgin
        #cp -r $dossier/.config /home/$id/
        #cp -r $dossier/.theme home/$id/
        #cp -r $dossier/.mozilla home/$id/
        #Install libdvdcss (necessite apt-transport-https)
        wget -O - https://download.videolan.org/pub/debian/videolan-apt.asc | sudo apt-key add - && echo "deb https://download.videolan.org/pub/debian/stable/ /" | sudo tee /etc/apt/sources.list.d/videolan.list
        echo "deb-src https://download.videolan.org/pub/debian/stable/ /" | sudo tee /etc/apt/sources.list.d/videolan.list
        #Install youtube-dl
        sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
        sudo chmod a+rx /usr/local/bin/youtube-dl
        #Install VirtualBox
        #wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
        #wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
        #echo "deb https://download.virtualbox.org/virtualbox/debian stretch contrib" |sudo tee -a /etc/apt/sources.list.d/virtualbox.list
        sudo apt update
        #sudo apt-get install virtualbox-6.0
        sudo apt install libdvdcss2
        #echo "URL de telechargement VMware : https://my.vmware.com/fr/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/12_0"
        #echo "Pour installer, utiliser la commande sudo bash VMware-xxxx.bundle"
        #Dependances VMware
        #sudo apt install libx11-6 libx11-dev x-window-system-core x-window-system xorg-docs libxtst6 psmisc build-essential
        echo "Installation finie"
else
        exit
fi

15.3 Compression de PDF

Ce script permet de compresser des PDF sans avoir à passer par un utilitaire tiers.
Note : je n’ai plus aucun souvenirs de comment je l’ai créé, je l’ai juste testé avant de le reproduire ici et il fonctionne.

#!/bin/bash
echo "Nom et chemin du fichier a compresser, sans l’extension .pdf"
read chemin
echo "Nom et chemin du fichier de sortie, sans l’extension .pdf"
read sortie
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$sortie.pdf $chemin.pdf

15.4 Écrire soit-même des fortunes en semi-automatique

Les fortunes sont les fichiers permettant d’afficher des citations aléatoires dans un terminal ou dans certains widgets. Il en existe de nombreuses versions mais on peut aussi les créer nous-même, comme c’est un peu fastidieux, j’avais fait un script pour l’occasion. Attention il nécessite d’être exécuté en root car il écrit des fichiers dans des répertoires protégés en écriture.

#!/bin/bash
#Ce script a pour but de faciliter la mise a jour des fichiers fortune.
echo -e "\033[1;45;41m Ce script necessite les droits d’administrateur pour fonctionner \033[0m"
echo -e "\033[1;44m Bienvenue dans ce script de mise a jour de fortune \033[0m"
#Creation d’un fichier texte avec la liste des fichiers fortune (1 par ligne)
cd /usr/share/games/fortunes
ls -I "*.dat" -I "*.u8"
echo -e "\033[1;44mTaper le nom du fichier a modifier, ou" "\033[1;42mNouveau\033[0m""\033[1;44m pour un nouveau fichier\033[0m"
#cree la variable fichier en lui assignant la valeur tapee
read num
if [ $num = Nouveau ]; then
   echo -e "\033[1;42mEntrer un nom pour le nouveau fichier\033[0m"
   read fichier
else
   for i in *
   do
      if [ $num = $i ]; then
         fichier=$i
      fi
   done
fi
if [ -z "$fichier" ]; then
   echo "Le fichier n’existe pas"
else
   echo -e "\033[1;45;41mModification avec nano ou avec le script ?\033[0m"
   echo -e "\033[1;45;31mNano : 1\033[0m"
   echo -e "\033[1;45;34mScript : 2\033[0m"
   read choix
   if [ $choix = 1 ]; then
      nano /usr/share/games/fortunes/$fichier
      echo -e "\033[1;45;41mFin de la modification\033[0m"
   elif [ $choix = 2 ]; then
      #initialise la variable rep a 0 pour la boucle while
      rep=o
      while [ $rep = o ]
         #boucle while : tant que la variable rep reste a "o" on peut continuer a rajouter des lignes.
         #on demande donc a chaque insertion si l’on continue ou pas, si une autre valeur que o est renseignee, le script sort de la boucle while
         do
         echo "Entrer la citation a ajouter et appuyer sur [ENTREE]"
         #assigne la variable ligne a l’insertion au clavier
         read ligne
         #ajoute apres la derniere ligne du fichier la variable  ligne
         echo $ligne >> /usr/share/games/fortunes/$fichier
         #rajoute une nouvelle ligne avec un %
         echo % >> /usr/share/games/fortunes/$fichier
         echo "Continuer ? [o/n]"
         #enregistre la reponse pour continuer dans rep
         read rep
      done
   fi
   #mets a jour les autres fichiers fortune
   strfile /usr/share/games/fortunes/$fichier /usr/share/games/fortunes/$fichier.u8
   strfile /usr/share/games/fortunes/$fichier /usr/share/games/fortunes/$fichier.dat
fi
exit 0;

15.5 Convertir une archive Youtube en dossier de favoris

Ce projet répondait à un besoin spécifique de récupérer mes playlists Youtube avant de supprimer mon compte. Youtube permet de récupérer une archive de toutes ses données, mais les donne sous forme de fichier .json qui est complètement inutilisable tel quel.
Mon idée était de récupérer toutes les données et d’en faire un .html exploitable par firefox comme une sauvegarde de favoris et donc en faire un dossier avec par exemple toutes mes vidéos "À voir"ou mes playlists.
Ce script utilise des fichiers annexes header.txt et prog.sed pour fonctionner et écrit plusieurs fichiers dans le dossier tmp. Il faut les supprimer à chaque nouvelle utilisation. Pour cela vous pouvez utiliser le script rm.sh.

#!/bin/bash
#Conversion .json to id and title
echo -e "name of .json :"
read path
#.json file gives the video id under "videoId" : "example",
#.json file gives the video title under "title" : "example"
#For each entry videoId is given twice
#Remove every lines without "videoId" : " and writes the results in a temp file
sed ’’’/"videoId" : "/!d’’’ $path &>> /tmp/tmpIds
#Same thing with titles
sed ’’’/"title" : "/!d’’’ $path &>> /tmp/Titles
#There is two lines for each Id but one ends with ", so it removes all those lines
sed ’’’/",/d’’’ /tmp/tmpIds &>> /tmp/Ids
#We replace "videoId" by the HTML
sed ’’’s/      "videoId" : "/\<DT\>\<A HREF="https:\/\/www\.youtube\.com\/watch?v=/g’’’ /tmp/Ids &>> /tmp/Ids2
while read line
do
        echo "${line/%\"/</A>}" &>> /tmp/Titles2
done < /tmp/Titles
sed ’’’s/"title" : "/>/g’’’ /tmp/Titles2 &>> /tmp/Titles3
paste -d "" /tmp/Ids2 /tmp/Titles3 &>> links.html
sed -f prog.sed links.html &>> linksdone.html
cat header.txt linksdone.html >autobookmarks.html
echo -e \<\/DL\>\<p\> &>> autobookmarks.html
echo -e \<\/DL\>\<p\> &>> autobookmarks.html
cp autobookmarks $path.html’

15.5.1 prog.sed

i\ \<DL\>\<p\>
a\ \<\/DL\>\<p\>

15.5.2 header.txt

<!DOCTYPE NETSCAPE-Bookmark-file-1>
<!-- This is an automatically generated file.
     It will be read and overwritten.
     DO NOT EDIT! -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<TITLE>Bookmarks</TITLE>
<H1>Bookmarks</H1>

15.5.3 rm.sh

#!/bin/bash
rm /tmp/Titles
rm /tmp/Titles2
rm /tmp/Titles3
rm /tmp/Ids
rm /tmp/Ids2
rm /tmp/tmpIds
rm autobookmarks.html
rm links.html
rm linksdone.html
rm linksdone2.html
rm linkstmp