[bash] script non fonctionnelle, mais pas d'e
Résolu
periplasme
Messages postés
422
Statut
Membre
-
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour tout le monde,
voila, téléchargant beaucoup, je souhaitais automatiser la gestion des fichiers (les musiques dans music/, les ebooks dans ebooks/ ... ) bref, je suis pas über familier avec les script et je trouve pas où se trouve l'erreur ...
bash ne me cri pas dessus, mais ne copie rien ...
une âme charitable pour m'expliquer mon erreur ?
voila, téléchargant beaucoup, je souhaitais automatiser la gestion des fichiers (les musiques dans music/, les ebooks dans ebooks/ ... ) bref, je suis pas über familier avec les script et je trouve pas où se trouve l'erreur ...
# les extensions
tab="*.epub"
tab[1]="*.pdf"
tab[2]="*.mp3"
tab[3]="*.ogg"
tab[4]="*.wav"
tab[5]="*.avi"
tab[6]="*.mkv"
tab[7]="*.mp4"
# pour tout fichiers dans le répertoire courant, on verifie l'extension, et on range en conséquence.
for ((i=0; i<=7; i++))
do
#epub et pdf
if test $i -le 1; then
find ./ -name tab[$i] -exec cp {} ebooks/ \;
else #mp3, ogg, et wav
if test $i -ge 2 && test $i -le 4; then
find ./ -name tab[$i] -exec cp {} music/ \;
else #avi, mkv, et mp4
if test $i -ge 5 && test $i -le 7; then
find ./ -name tab[$i] -exec cp {} movies/ \;
fi fi fi
done
bash ne me cri pas dessus, mais ne copie rien ...
une âme charitable pour m'expliquer mon erreur ?
3 réponses
-
hello
!! attention, il me semble que le find va aussi descendre dans les répertoires ebooks music et movies et essayer de copier les fichiers sur eux-mêmes.
on peut utiliser tab=(...) pour initialiser un tableau
utiliser ${} avec les variables : ${tab[$i]}
utiliser " pour le find -name à cause des *
on peut connaitre la taille du tableau avec ${#tab[@]}#!/bin/bash # les extensions tab=("*.epub" "*.pdf" "*.mp3" "*.ogg" "*.wav" "*.avi" "*.mkv" "*.mp4") # pour tout fichiers dans le répertoire courant, on verifie l'extension, et on range en conséquence. for ((i=0; i<=${#tab[@]}; i++)) do #epub et pdf if test $i -le 1; then find ./ -name "${tab[$i]}" -exec cp {} ebooks/ \; else #mp3, ogg, et wav if test $i -ge 2 && test $i -le 4; then find ./ -name "${tab[$i]}" -exec cp {} music/ \; else #avi, mkv, et mp4 if test $i -ge 5 && test $i -le 7; then find ./ -name "${tab[$i]}" -exec cp {} movies/ \; fi fi fi done -
Salut.
Je ne sais pas trop ce qui merde dans ton script. Mais pourquoi faire compliquer quand on peut faire simple ?books="*.pdf *.epub" music="*.mp3 *.wav" video="*.avi *.mpeg" if ls $books then : cp $books ebooks fi if ls $music then : cp $music music/ fi if ls $video then : cp $video movies/ fi
d'ailleurs, si tu veux ranger, tu devrais plutôt faire un mv qu'un cp.
De toute les manières ta boucle est inutile, si tu veux vraiment le faire avec find, il y a moyen de lui passé plusieurs extension. -
Salut,
Une autre possibilité :
#!/bin/bash mkdir -p ebooks musics movies for fic in * do case "${fic##*.}" in epub|pdf) cp -v "${fic}" ebooks/ ;; mp3|ogg|wav) cp -v "${fic}" musics/ ;; avi|mkv|mp4) cp -v "${fic}" movies/ ;; *) ;; esac done