Compare commits

...

2 Commits

Author SHA1 Message Date
Cédric Abonnel 052973faa2 Gestion des pages MAN utilisateurs créée. 2023-11-19 17:10:15 +01:00
Cédric Abonnel b5b4f6ffc3 Nom du log plus cohérent 2023-11-19 10:06:46 +01:00
6 changed files with 382 additions and 27 deletions

1
files_local-share-doc Normal file
View File

@ -0,0 +1 @@
playlist_gen.1.md

1
files_local-share-man Normal file
View File

@ -0,0 +1 @@
playlist_gen.1

View File

@ -1,14 +1,8 @@
#!/bin/bash #!/bin/bash
# Spécifier le chemin du répertoire du dépôt Git local
repository_dir="local/bin"
# Spécifier le chemin du répertoire ~/.local/bin
destination_dir="$HOME/.local/bin"
# Spécifier le chemin du fichier journal # Spécifier le chemin du fichier journal
log_dir="$HOME/log" log_dir="$HOME/log"
log_file="${log_dir}/copy_files_$(date '+%Y%m%d-%H%M%S')_$$.log" log_file="${log_dir}/a5l-scripts_bash-$(date '+%Y%m%d-%H%M%S')-$$.log"
# Fonction pour afficher un message d'erreur et quitter le script en cas d'erreur # Fonction pour afficher un message d'erreur et quitter le script en cas d'erreur
error() { error() {
@ -21,24 +15,137 @@ error() {
# Fonction pour enregistrer les messages de journal # Fonction pour enregistrer les messages de journal
log() { log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $$ - $1" >> "$log_file" echo "$(date '+%Y-%m-%d %H:%M:%S') - $$ - $1" >> "$log_file"
echo "$1"
} }
create_dir() {
# S'assurer que le répertoire de destination existe, sinon, le créer
log "Tentative de création du dossier $1"
if [ ! -d "$1" ]; then
mkdir -p "$1" || error "Impossible de créer le répertoire $1"
log " _ Le répertoire $1 a été créé."
else
log " _ Le répertoire $1 existe déjà."
fi
}
log "Debut du script"
## Post traitement : log ## Post traitement : log
# S'assurer que le répertoire de destination existe, sinon, le créer # S'assurer que le répertoire de destination existe, sinon, le créer
if [ ! -d "$log_dir" ]; then create_dir ${log_dir}
mkdir -p "$log_dir" || error "Impossible de créer le répertoire $log_dir"
log " _ Le répertoire $log_dir a été créé." log "Rafraichissement des listes de fichiers"
./prep.sh
#### .local/share/doc ####
## Declarations ##
# Spécifier le chemin du répertoire destination
destination_dir="$HOME/.local/share/doc"
# Spécifier le chemin du répertoire du dépôt Git local
source_dir="local/share/doc"
file_local_desc=files_local-share-doc
## Traitement ##
log "Debut du Traitement pour $destination_dir"
# S'assurer que le répertoire de destination existe, sinon, le créer
create_dir "$destination_dir"
log " _ Traitement des fichiers à copier dans $destination_dir"
# Copier sélectivement les fichiers du dépôt Git local vers ~/.local/bin en préservant la structure
# Vérifier si le fichier "$file_local_desc" existe
if [ -e "$file_local_desc" ]; then
# Récupérer des fichiers installés
fileslist_local=$(cat "$file_local_desc")
# Utilisez la commande rsync pour copier les fichiers
log " __ Copie des fichiers"
rsync -av --files-from="$file_local_desc" "$source_dir/" "$destination_dir/" >> "$log_file" 2>&1 || error "Échec de la copie avec rsync"
else
error "Le fichier '$file_local_desc' n'existe pas. Votre dépôt Git local n'est pas complet ou quelque chose s'est mal passé."
fi fi
## Traitement de .local/bin
#### .local/share/man ####
## Declarations ##
# Spécifier le chemin du répertoire ~/.local/bin
destination_dir="$HOME/.local/share/man"
# Spécifier le chemin du répertoire du dépôt Git local
source_dir="local/share/man"
file_local_desc=files_local-share-man
## Traitement ##
log "Debut du Traitement pour $destination_dir"
# S'assurer que le répertoire de destination existe, sinon, le créer
create_dir "$destination_dir"
# Vérifier si le répertoire destination est déjà dans le PATH
if [[ ! ":$(manpath):" == *":$destination_dir:"* ]]; then
# Ajouter le répertoire destination au PATH dans le fichier de configuration de session de l'utilisateur
echo 'export MANPATH="$(manpath):'"$destination_dir"'"' >> ~/.bashrc
source ~/.bashrc
log " _ $destination_dir a été ajouté au MANPATH dans le fichier de configuration de session de l'utilisateur."
fi
log " _ Traitement des fichiers à copier dans $destination_dir"
# Copier sélectivement les fichiers du dépôt Git local
# Vérifier si le fichier "$file_local_desc" existe
if [ -e "$file_local_desc" ]; then
# Récupérer des fichiers installés # Récupérer des fichiers installés
./prep.sh fileslist_local=$(cat "$file_local_desc")
files_local_bin=$(cat files_local-bin)
# Utilisez la commande rsync pour copier les fichiers
log " _ Copie des fichiers listés dans $file_local_desc"
rsync -av --files-from="$file_local_desc" "$source_dir/" "$destination_dir/" >> "$log_file" 2>&1 || error "Échec de copie"
else
error "Le fichier '$file_local_desc' n'existe pas. Votre dépôt Git local n'est pas complet ou quelque chose s'est mal passé."
fi
#### .local/bin ####
## Declarations ##
# Spécifier le chemin du répertoire ~/.local/bin
destination_dir="$HOME/.local/bin"
# Spécifier le chemin du répertoire du dépôt Git local
source_dir="local/bin"
file_local_desc=files_local-bin
## Traitement ##
log "Debut du Traitement pour $destination_dir"
# S'assurer que le répertoire de destination existe, sinon, le créer
create_dir $destination_dir
# Vérifier si le répertoire destination est déjà dans le PATH # Vérifier si le répertoire destination est déjà dans le PATH
if [[ ! ":$PATH:" == *":$destination_dir:"* ]]; then if [[ ! ":$PATH:" == *":$destination_dir:"* ]]; then
@ -48,22 +155,19 @@ if [[ ! ":$PATH:" == *":$destination_dir:"* ]]; then
log " _ $destination_dir a été ajouté au PATH dans le fichier de configuration de session de l'utilisateur." log " _ $destination_dir a été ajouté au PATH dans le fichier de configuration de session de l'utilisateur."
fi fi
# S'assurer que le répertoire de destination existe, sinon, le créer log " _ Traitement des fichiers à copier dans $destination_dir"
if [ ! -d "$destination_dir" ]; then
mkdir -p "$destination_dir" || error "Impossible de créer le répertoire $destination_dir"
log " _ Le répertoire $destination_dir a été créé."
fi
log " _ Traitement des fichiers à copier dans ~/local/bin"
# Copier sélectivement les fichiers du dépôt Git local vers ~/.local/bin en préservant la structure # Copier sélectivement les fichiers du dépôt Git local vers ~/.local/bin en préservant la structure
# Vérifier si le fichier "files_local-bin" existe # Vérifier si le fichier "$file_local_desc" existe
if [ -e "files_local-bin" ]; then if [ -e "$file_local_desc" ]; then
# Récupérer des fichiers installés
fileslist_local=$(cat $file_local_desc)
# Utilisez la commande rsync pour copier les fichiers # Utilisez la commande rsync pour copier les fichiers
log " __ Copie des fichiers" log " __ Copie des fichiers"
rsync -av --files-from=files_local-bin "$repository_dir/" "$destination_dir/" >> "$log_file" 2>&1 || error "Échec de la copie avec rsync" rsync -av --files-from=$file_local_desc "$source_dir/" "$destination_dir/" >> "$log_file" 2>&1 || error "Échec de la copie avec rsync"
# Renommez les fichiers en supprimant les extensions # Renommez les fichiers en supprimant les extensions
for file in $files_local_bin; do for file in $fileslist_local; do
if [ -f "$destination_dir/$file" ]; then if [ -f "$destination_dir/$file" ]; then
new_name="${file%.*}" # Supprimer l'extension new_name="${file%.*}" # Supprimer l'extension
mv -v "$destination_dir/$file" "$destination_dir/$new_name" || error "Impossible de renommer le fichier $file en $new_name" mv -v "$destination_dir/$file" "$destination_dir/$new_name" || error "Impossible de renommer le fichier $file en $new_name"
@ -72,7 +176,7 @@ if [ -e "files_local-bin" ]; then
done done
else else
error "Le fichier 'files_local-bin' n'existe pas. Votre dépôt Git local n'est pas complet ou quelque chose s'est mal passé." error "Le fichier '$file_local_desc' n'existe pas. Votre dépôt Git local n'est pas complet ou quelque chose s'est mal passé."
fi fi
# Affiche un message de confirmation # Affiche un message de confirmation

View File

@ -0,0 +1,56 @@
# playlist_gen(1) - Génère une playlist M3U à partir de fichiers audio
## SYNOPSIS
**playlist_gen** [-n \<nombre de fichiers\>] [-d \<répertoire\>] [-o \<fichier de sortie\>]
## DESCRIPTION
**playlist_gen** est un script Bash qui permet de générer une playlist M3U à partir de fichiers audio situés dans un répertoire spécifié.
## OPTIONS
- **-n \<nombre de fichiers\>** : Spécifie le nombre de fichiers à inclure dans la playlist. Par défaut, le nombre de fichiers est 100.
- **-d \<répertoire\>** : Spécifie le répertoire à scanner pour les fichiers audio. Par défaut, le répertoire actuel est utilisé.
- **-o \<fichier de sortie\>** : Spécifie le nom du fichier M3U de sortie. Par défaut, le fichier est créé dans le répertoire de la musique de l'utilisateur.
## UTILISATION
```
playlist_gen -n 50 -d /chemin/vers/repertoire -o playlist.m3u
```
## COMPATIBILITÉ
Ce script est compatible avec les fichiers audio aux formats MP3, Opus, Ogg et M4A.
## EXEMPLES
1. Générer une playlist M3U à partir du répertoire de musique par défaut de l'utilisateur :
```
playlist_gen
```
2. Générer une playlist M3U à partir d'un répertoire spécifique avec 25 fichiers audio :
```
playlist_gen -n 25 -d /chemin/vers/repertoire
```
## AUTEUR
Ce script a été écrit par Cédric Abonnel.
## RAPPORTS D'ERREURS
Pour signaler des erreurs ou des problèmes, veuillez contacter a5l.scripts_bash@acemail.fr.
## VOIR AUSSI
- [man(1)](https://linux.die.net/man/1/man)
- [find(1)](https://linux.die.net/man/1/find)
- [stat(1)](https://linux.die.net/man/1/stat)

View File

@ -0,0 +1,90 @@
.\" Automatically generated by Pandoc 3.1.3
.\"
.\" Define V font for inline verbatim, using C font in formats
.\" that render this, and otherwise B font.
.ie "\f[CB]x\f[]"x" \{\
. ftr V B
. ftr VI BI
. ftr VB B
. ftr VBI BI
.\}
.el \{\
. ftr V CR
. ftr VI CI
. ftr VB CB
. ftr VBI CBI
.\}
.TH "" "" "" "" ""
.hy
.SH playlist_gen(1) - Génère une playlist M3U à partir de fichiers audio
.SS SYNOPSIS
.PP
\f[B]playlist_gen\f[R] [-n <nombre de fichiers>] [-d <répertoire>] [-o
<fichier de sortie>]
.SS DESCRIPTION
.PP
\f[B]playlist_gen\f[R] est un script Bash qui permet de générer une
playlist M3U à partir de fichiers audio situés dans un répertoire
spécifié.
.SS OPTIONS
.IP \[bu] 2
\f[B]-n <nombre de fichiers>\f[R] : Spécifie le nombre de fichiers à
inclure dans la playlist.
Par défaut, le nombre de fichiers est 100.
.IP \[bu] 2
\f[B]-d <répertoire>\f[R] : Spécifie le répertoire à scanner pour les
fichiers audio.
Par défaut, le répertoire actuel est utilisé.
.IP \[bu] 2
\f[B]-o <fichier de sortie>\f[R] : Spécifie le nom du fichier M3U de
sortie.
Par défaut, le fichier est créé dans le répertoire de la musique de
l\[cq]utilisateur.
.SS UTILISATION
.IP
.nf
\f[C]
playlist_gen -n 50 -d /chemin/vers/repertoire -o playlist.m3u
\f[R]
.fi
.SS COMPATIBILITÉ
.PP
Ce script est compatible avec les fichiers audio aux formats MP3, Opus,
Ogg et M4A.
.SS EXEMPLES
.IP "1." 3
Générer une playlist M3U à partir du répertoire de musique par défaut de
l\[cq]utilisateur :
.RS 4
.IP
.nf
\f[C]
playlist_gen
\f[R]
.fi
.RE
.IP "2." 3
Générer une playlist M3U à partir d\[cq]un répertoire spécifique avec 25
fichiers audio :
.RS 4
.IP
.nf
\f[C]
playlist_gen -n 25 -d /chemin/vers/repertoire
\f[R]
.fi
.RE
.SS AUTEUR
.PP
Ce script a été écrit par Cédric Abonnel.
.SS RAPPORTS D\[cq]ERREURS
.PP
Pour signaler des erreurs ou des problèmes, veuillez contacter
a5l.scripts_bash\[at]acemail.fr.
.SS VOIR AUSSI
.IP \[bu] 2
man(1) (https://linux.die.net/man/1/man)
.IP \[bu] 2
find(1) (https://linux.die.net/man/1/find)
.IP \[bu] 2
stat(1) (https://linux.die.net/man/1/stat)

105
prep.sh
View File

@ -1,4 +1,107 @@
#!/bin/bash #!/bin/bash
# Répertorier les fichiers
# Spécifier le chemin du fichier journal
log_dir="$HOME/log"
log_file="${log_dir}/a5l-scripts_bash_prep-$(date '+%Y%m%d-%H%M%S')-$$.log"
# Fonction pour afficher un message d'erreur et quitter le script en cas d'erreur
error() {
local error_message="$1"
log "ERREUR: $error_message"
echo "Erreur: $error_message"
exit 1
}
# Fonction pour enregistrer les messages de journal
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $$ - $1" >> "$log_file"
echo "$1"
}
create_dir() {
# S'assurer que le répertoire de destination existe, sinon, le créer
log "Tentative de création du dossier $1"
if [ ! -d "$1" ]; then
mkdir -p "$1" || error "Impossible de créer le répertoire $1"
log " _ Le répertoire $1 a été créé."
else
log " _ Le répertoire $1 existe déjà."
fi
}
log "Lister les fichiers présents dans local/bin"
ls local/bin/ -c1 >files_local-bin ls local/bin/ -c1 >files_local-bin
########
# 1. Lister des fichiers dans local/share/doc
# 2. Générer les fichiers man dans local/share/man
# 3. Lister des fichiers dans local/share/man
# Spécifier le chemin du répertoire du dépôt Git local
source_dir="local/share/doc"
# Spécifier le chemin du répertoire
destination_dir="local/share/man"
create_dir "$destination_dir"
log "Lister les fichiers présents dans local/share/doc"
ls "$source_dir/" -c1 >files_local-share-doc
log "Creer les pages MAN"
file_local_desc=files_local-share-doc
# Répertoire local/share/man
## Vérifier si Pandoc est installé
if ! command -v pandoc &> /dev/null; then
log "Pandoc n'est pas installé."
# Vérifier la distribution pour utiliser le gestionnaire de paquets approprié
if [ -x "$(command -v dnf)" ]; then
log "Installation de Pandoc via DNF (Red Hat)..."
sudo dnf install -y pandoc
elif [ -x "$(command -v yum)" ]; then
log "Installation de Pandoc via YUM (Red Hat)..."
sudo dnf install -y pandoc
elif [ -x "$(command -v apt)" ]; then
log "Installation de Pandoc via APT (Debian)..."
sudo apt update && sudo apt install -y pandoc
else
error "Le gestionnaire de paquets n'est pas pris en charge."
fi
# Vérifier à nouveau si Pandoc est installé
if ! command -v pandoc &> /dev/null; then
error "L'installation de Pandoc a échoué."
else
log "Pandoc a été installé avec succès."
fi
fi
log " Traitement des fichiers à copier dans $destination_dir"
# Génération des fihciers man
log " Vérifier si le fichier $file_local_desc existe"
if [ -e "$file_local_desc" ]; then
log " Récupérer des fichiers installés"
fileslist_local=$(cat $file_local_desc)
log " Créer la page man"
for file in $fileslist_local; do
new_name="${file%.*}" # Supprimer l'extension md
if [ -f "$source_dir/$file" ]; then
pandoc -s "$source_dir/$file" -t man -o "$destination_dir/$new_name" || error "Impossible de créer la page 'man' $destination_dir/$new_name depuis $source_dir/$file"
log " Creation de la page MAN $destination_dir/$new_name depuis $source_dir/$file"
fi
done
else
error " Le fichier $file_local_desc est introuvable."
fi
log "Lister les fichiers présents dans local/share/man"
ls local/share/man/ -c1 >files_local-share-man