From: Vincent Le Gallic Date: Mon, 19 Jan 2015 00:06:00 +0000 (+0100) Subject: [nettoie_musique] v2 : testé en conditions réelles, amélioré. X-Git-Url: http://gitweb.pimeys.fr/?p=scripts-20-100.git;a=commitdiff_plain;h=016601e67a465ec1ba94302fd16f2c2fb759ce01 [nettoie_musique] v2 : testé en conditions réelles, amélioré. Notamment, on parse correctement des options commandline pour ignorer ou non les fichiers texte, vidéo et playlist. --- diff --git a/nettoie_musique.sh b/nettoie_musique.sh index ef1d5fd..24621b4 100755 --- a/nettoie_musique.sh +++ b/nettoie_musique.sh @@ -1,14 +1,55 @@ #!/bin/bash -# Pour virer dans les dossiers de musique tout ce qui n'a -# rien à y foutre +# Pour virer dans les dossiers de musique tout ce qui n'a rien à y foutre -dir=$1 + +################################################################# +## Déclaration des variables ## +################################################################# +videoregex="\|avi\|wmv\|flv\|mp4\|mov\|mpe?g" +playlistregex="\|pls\|m3u" +textregex="\|txt" + +################################################################# +## Parsing des arguments ## +################################################################# +TEMP=`getopt -o vpt --long no-video,no-playlist,no-text -n 'nettoie_musique.sh' -- "$@"` + +if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi + +eval set -- "$TEMP" + +while true ; do + case "$1" in + -v|--no-video) videoregex='';; + -p|--no-playlist) playlistregex='';; + -t|--no-text) textregex='';; + --) shift ; break ;; + *) echo "Internal error!" ; exit 1 ;; + esac + shift +done + +# Les arguments restants sont les dossiers qu'on parcourra +finddirs="$@" + +################################################################# +## Détermination de la regex ## +################################################################# + +# On fusionne dedans les extensions de vidéo et de playlist +# sauf si elles ont été vidées par une option # Les fichiers matchant cette regexp ne sont pas bazardés -regex='^.*\.\(wma\|mp[34]\|flac\|m3u\|wav\|ogg\)$' +regex="^.*\.\(wma\|mp3\|flac\|wav\|ogg\|m4a${videoregex}${playlistregex}${textregex}\)$" + + +echo $regex -# Quelques explication : +################################################################# +## Suppression des fichiers indésirables ## +################################################################# +# Quelques explications pour la suite : # On veut faire un find -delete, mais en affichant le résultat avant # Pour gérer les caractères foireux, on a besoin du -print0, # mais ensuite, pour le handle, on fait ce tricks à base de read @@ -22,7 +63,7 @@ regex='^.*\.\(wma\|mp[34]\|flac\|m3u\|wav\|ogg\)$' unset files i while IFS= read -r -u3 -d $'\0' file; do files[i++]="${file}"; -done 3< <(find ${dir} -type f \! -regex ${regex} -print0) +done 3< <(find ${finddirs} -type f \! -regex ${regex} -print0) if [ ${#files[@]} -eq 0 ] then @@ -36,6 +77,9 @@ else [[ "${ans}" = "y" ]] && for i in "${files[@]}"; do rm "${i}"; done fi +################################################################# +## Suppression des dossiers vides ## +################################################################# # On recommence ensuite avec les dossiers vides unset dirs # pour exécuter la boucle while au moins une fois @@ -44,9 +88,9 @@ dirs[0]=something while [ ${#dirs[@]} -ne 0 ] do unset dirs i - while IFS= read -r -u3 -d $'\0' d; do - dirs[i++]="${d}"; - done 3< <(find ${dir} -type d -empty -print0) + while IFS= read -r -u3 -d $'\0' dir; do + dirs[i++]="${dir}"; + done 3< <(find ${finddirs} -type d -empty -print0) if [ ${#dirs[@]} -ne 0 ] then