#!/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
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
[[ "${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
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