]> gitweb.pimeys.fr Git - scripts-20-100.git/commitdiff
[nettoie_musique] v2 : testé en conditions réelles, amélioré.
authorVincent Le Gallic <legallic@crans.org>
Mon, 19 Jan 2015 00:06:00 +0000 (01:06 +0100)
committerVincent Le Gallic <legallic@crans.org>
Mon, 19 Jan 2015 00:06:00 +0000 (01:06 +0100)
Notamment, on parse correctement des options commandline
pour ignorer ou non les fichiers texte, vidéo et playlist.

nettoie_musique.sh

index ef1d5fdcd303e362b251ec4a315d46467cc52c3a..24621b4dbf24c38270aa653dabec3f3fd066d2ae 100755 (executable)
@@ -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