]>
gitweb.pimeys.fr Git - scripts-20-100.git/blob - nettoie_musique.sh
3 # Pour virer dans les dossiers de musique tout ce qui n'a rien à y foutre
6 #################################################################
7 ## Déclaration des variables ##
8 #################################################################
9 videoregex
="\|avi\|wmv\|flv\|mp4\|mov\|mpe?g"
10 playlistregex
="\|pls\|m3u"
13 #################################################################
14 ## Parsing des arguments ##
15 #################################################################
16 TEMP
=`getopt -o vpt --long no-video,no-playlist,no-text -n 'nettoie_musique.sh' -- "$@"`
18 if [ $?
!= 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
24 -v|
--no-video) videoregex
='';;
25 -p|
--no-playlist) playlistregex
='';;
26 -t|
--no-text) textregex
='';;
28 *) echo "Internal error!" ; exit 1 ;;
33 # Les arguments restants sont les dossiers qu'on parcourra
36 #################################################################
37 ## Détermination de la regex ##
38 #################################################################
40 # On fusionne dedans les extensions de vidéo et de playlist
41 # sauf si elles ont été vidées par une option
43 # Les fichiers matchant cette regexp ne sont pas bazardés
44 regex
="^.*\.\(wma\|mp3\|flac\|wav\|ogg\|m4a${videoregex}${playlistregex}${textregex}\)$"
49 #################################################################
50 ## Suppression des fichiers indésirables ##
51 #################################################################
52 # Quelques explications pour la suite :
53 # On veut faire un find -delete, mais en affichant le résultat avant
54 # Pour gérer les caractères foireux, on a besoin du -print0,
55 # mais ensuite, pour le handle, on fait ce tricks à base de read
56 # vider IFS et -d servent à redéfinir le délimiteur de read
57 # < <(…) fait de la tuyauterie, et on a besoin de faire ça
58 # parce que sinon le while est lancé dans un subshell et dès qu'on
59 # en sort, on oublie a, ce serait ballot.
60 # 3< et -u3 servent à faire passer cette tuyauterie par le descripteur
61 # 3 et pas 1, ce qui permet de toujours utiliser stdin dans le corps
64 while IFS
= read -r -u3 -d $
'\0' file; do
66 done 3< <(find ${finddirs} -type f \
! -regex ${regex} -print0)
68 if [ ${#files[@]} -eq 0 ]
70 echo "No file to remove."
73 for i
in "${files[@]}"; do echo "${i}"; done |
less -SR
75 read -p "Remove all these unwanted files ? [y/N] " ans
76 # …on supprime ensuite
77 [[ "${ans}" = "y" ]] && for i in "${files[@]}"; do rm "${i}"; done
80 #################################################################
81 ## Suppression des dossiers vides ##
82 #################################################################
83 # On recommence ensuite avec les dossiers vides
85 # pour exécuter la boucle while au moins une fois
88 while [ ${#dirs[@]} -ne 0 ]
91 while IFS
= read -r -u3 -d $
'\0' dir
; do
93 done 3< <(find ${finddirs} -type d
-empty -print0)
95 if [ ${#dirs[@]} -ne 0 ]
98 for i
in "${dirs[@]}"; do echo "${i}"; done |
less -SR
100 read -p "Remove all these empty directories ? [y/N] " ans
101 # …on supprime ensuite
102 [[ "${ans}" = "y" ]] && for i in "${dirs[@]}"; do rmdir "${i}"; done