[bash] script non fonctionnelle, mais pas d'e

Résolu/Fermé
periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 - Modifié par periplasme le 5/04/2012 à 22:40
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 7 avril 2012 à 10:45
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 ...
# 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 ?


A voir également:

3 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 6/04/2012 à 09:16
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   
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
6 avril 2012 à 09:29
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.
0
periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 53
6 avril 2012 à 18:03
effectivement, cela me semble plus simple. je pense que j'ai voulu faire un poil trop compliqué ...

ps : j'utilise cp pour "tester" avec de passer à mv, histoire d'eviter de potentiels erreurs.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 avril 2012 à 10:45
à mon avis ce n'est pas nécessaire. Regarde le man de mv, je pense qu'il y aura une option qui te conviendra pour tester.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
6 avril 2012 à 11:46
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
0
periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 53
6 avril 2012 à 18:07
cette solution me semble un poil plus elegeante que celle de charSniper, je vais donc l'adopter !
merci à tous pour votre aide !
0