Lo Furòl

... de l'ouverture (en occitan)

Vous êtes ici : Accueil / Programmation / [BASH] Scripts utiles

Programmation

[BASH] Scripts utiles

Cette page me permet de retrouver des scripts en bash qui peuvent resservir (car on oublie lorsqu'on ne pratique pas souvent...).

Un script bash est un fichier exécutant un ensemble de commandes de façon automatisée (équivalent des macros).
Pour lancer ce fichier, on tapera dans un terminal une commande du type :

./fichier_script.sh

I- Problème d'espace, de tirets ou de caractères spéciaux dans les noms de fichiers et de répertoire

Voir :

II- Créer un sous-dossier identique dans tous les dossiers d'un même répertoire :

Sources :

Le script ci-dessous, crée dans le répertoire courant (là où se situe le script), un sous-dossier "FIR_école" dans tous les dossiers du répertoire courant (utile pour le drive Nextcloud par exemple).

#!/bin/bash

# $IFS permet de gérer les séparateurs comme l'espace dans les noms de dossiers
# l'option "--" dans mkdir permet d'ignorer les tirets comme séparateur
OLDIFS=$IFS
IFS=$'\n'
for d in `find . -mindepth 1 -maxdepth 1 -type d`; do
mkdir -p -- "$d"/FIR_école;
done
IFS=$OLDIFS
exit 0

 

III- Créer un sous-dossier identique dans tous les dossiers d'un même répertoire en reprenant le nom du dossier Principal :

Le script ci-dessous, crée dans le répertoire courant (là où se situe le script), un sous-dossier "RASED Nom de l'école" dans tous les dossiers du répertoire courant (utile pour le drive Nextcloud par exemple).
AVERTISSEMENT : Attention à bien placer le script dans le dossier principal et à le lancer à partir de là !

#!/bin/bash

# Ce script permet de créer, dans le répertoire courant, un sous-dossier "RASED Nom de l'école" dans tous les dossiers existants
#source : https://stackoverflow.com/questions/50285538/linux-shell-loop-for-create-file-in-each-folder

# $IFS permet de gérer les séparateurs comme l'espace dans les noms de dossiers
# l'option "--" dans mkdir permet d'ignorer les tirets comme séparateur
OLDIFS=$IFS
IFS=$'\n'
for d in `find . -mindepth 1 -maxdepth 1 -type d`; do
nomDossier=${d##*/}; #enlève "./" devant le nom du dossier
cheminDossier="$d"/RASED\ "$nomDossier"; #Nom de dossier du type "RASED Nom école" le caractère \ sert à échapper l'espace
mkdir -p -- "$cheminDossier";
done
IFS=$OLDIFS
exec bash; # évite de fermer le terminal après l'exécution du script dans un terminal (utile pour debugguer)
exit 0

 

IV- Récupérer des sous-dossiers ayant le même préfixe vers un dossier récapitulatif :

À partir du dossier racine courant, le script va copier les sous-dossiers commençant par un préfixe précis (RASED, AGRÉMENTS, ...) dans un dossier racine récapitulatif. Les commandes "echo" permettent de vérifier le contenu des variables pour le débogage.

#!/bin/bash

# Ce script permet de créer, dans le répertoire courant, un sous-dossier "Z- RASED Récap" qui recueillera tous les sous-dossiers RASED des écoles existants
#source : https://stackoverflow.com/questions/50285538/linux-shell-loop-for-create-file-in-each-folder

# $IFS permet de gérer les séparateurs comme l'espace dans les noms de dossiers
# l'option "--" dans mkdir permet d'ignorer les tirets comme séparateur
OLDIFS=$IFS
IFS=$'\n'
prefixe=RASED
echo "$prefixe"
dossierCourant=${PWD}
echo $dossierCourant
for d in `find . -mindepth 1 -maxdepth 1 -type d`; do
echo "$d"
nomDossier=${d##*/}; #sans "./" devant le nom du dossier
echo "$nomDossier"
cheminDossier="$d"/$prefixe\ "$nomDossier" #Nom de dossier du type "RASED Nom école"; avec \ pour échapper l'espace après RASED
echo "$cheminDossier"
if [ -d "$cheminDossier" ]
then
#echo "${d%/*}" #Nom du dossier parent
cheminDestination="${d%/*}"/Z-\ "$prefixe"\ Récap
echo $cheminDestination
cp -r -p -- "$cheminDossier" "$cheminDestination"; #copie récursivement en gardant les dates originales
fi
done
IFS=$OLDIFS
exec bash # évite de fermer le terminal après l'exécution du script (utile pour déboguer)
exit 0

 

V- Lister les fichiers des sous-dossiers AVEC DATE DE MODIFICATION :

Ce script doit permettre de lister tous les fichiers des sous-répertoires au même intitulé des écoles ainsi que leur date de modification. Ceci pour vérifier/contrôler leur existence par exemple.

À suivre...

Vous êtes ici : Accueil / Programmation / [BASH] Scripts utiles