]>
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
8 # Les fichiers matchant cette regexp ne sont pas bazardés
9 regex
='^.*\.\(wma\|mp[34]\|flac\|m3u\|wav\|ogg\)$'
11 # Quelques explication :
12 # On veut faire un find -delete, mais en affichant le résultat avant
13 # Pour gérer les caractères foireux, on a besoin du -print0,
14 # mais ensuite, pour le handle, on fait ce tricks à base de read
15 # vider IFS et -d servent à redéfinir le délimiteur de read
16 # < <(…) fait de la tuyauterie, et on a besoin de faire ça
17 # parce que sinon le while est lancé dans un subshell et dès qu'on
18 # en sort, on oublie a, ce serait ballot.
19 # 3< et -u3 servent à faire passer cette tuyauterie par le descripteur
20 # 3 et pas 1, ce qui permet de toujours utiliser stdin dans le corps
23 while IFS
= read -r -u3 -d $
'\0' file; do
25 done 3< <(find ${dir} -type f \
! -regex ${regex} -print0)
27 if [ ${#files[@]} -eq 0 ]
29 echo "No file to remove."
32 for i
in "${files[@]}"; do echo "${i}"; done |
less -SR
34 read -p "Remove all these unwanted files ? [y/N] " ans
35 # …on supprime ensuite
36 [[ "${ans}" = "y" ]] && for i in "${files[@]}"; do rm "${i}"; done
39 # On recommence ensuite avec les dossiers vides
41 # pour exécuter la boucle while au moins une fois
44 while [ ${#dirs[@]} -ne 0 ]
47 while IFS
= read -r -u3 -d $
'\0' d
; do
49 done 3< <(find ${dir} -type d
-empty -print0)
51 if [ ${#dirs[@]} -ne 0 ]
54 for i
in "${dirs[@]}"; do echo "${i}"; done |
less -SR
56 read -p "Remove all these empty directories ? [y/N] " ans
57 # …on supprime ensuite
58 [[ "${ans}" = "y" ]] && for i in "${dirs[@]}"; do rmdir "${i}"; done