[shell] Tri de fichiers avec extensions

fozzy -  
 Flow -
Bonjour à tous !

J'ai besoin d'écrire un script shell permettant de trier des fichiers suivant leur extension et de les déplacer dans un dossier créé par mes soins.
Le dossier rep_text est censé contenir à la fin de l'éxécution du bash tous les fichiers .txt du répertoire d'où a été lancé le script.

Je vous met mon travail car le script me déplace tout le dossier script (d'où est lancé le script) au lieu des fichiers en eux-même.

Si quelqu'un aurait l'obligence de m'expliquer pourquoi mon script ne fait pas ce que je demande, merci d'avance.

Le script est exécuté à partir du dossier : /home/bandit/Script/

Script :

#!/bin/sh
if [ ! -d /home/bandit/test_script ]
then
mkdir /home/bandit/test_script
mkdir /home/bandit/test_script/rep_text
mkdir /home/bandit/test_script/rep_mp3
mkdir /home/bandit/test_script/rep_tmp
fi

txt= find *.txt
mp3= find *.mp3
tmp= find *.tmp

val="/home/bandit/Script/"

echo "$txt"
echo "$mp3"
echo "$tmp"
cd ..

mv "/home/bandit/Script/$txt" /home/bandit/test_script/rep_text/
#mv $val$mp3 $val
#mv /home/bandit/Script/$tmp /home/bandit/test_script/rep_tmp

4 réponses

  1. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    Salut,
    Question sans doute très con :)

    Pourquoi tu ne fais pas :

    mv /home/bandit/Script/*.txt /home/bandit/test_script/rep_text/


    ?

    J'avais prévenu :)
    0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    teebo => C'est pas con, c'est la logique même ;-))

    fozzy => Tes variables, déjà faut les encadrer avec des guillemets puisqu'elles contiennent des espaces (txt="find *.txt"), ensuite puisqu'elles contiennent une commande, il vaut mieux les écrire comme suit :
    txt="$(find *.txt)"
    ;-))
    0
  3. fozzy
     
    Bah tout simplement parce que je n'y ai pas pensé oh la honte MDR !

    Maintenant tout fonctionne évidemment 8-)

    Bon je sors MDR

    Merci Thibault ta question m'a ouvert les yeux 8-)

    #!/bin/sh
    if [ ! -d /home/bandit/test_script ]
    then
    mkdir /home/bandit/test_script
    mkdir /home/bandit/test_script/rep_text
    mkdir /home/bandit/test_script/rep_mp3
    mkdir /home/bandit/test_script/rep_tmp
    fi

    mv /home/bandit/Script/*.txt /home/bandit/test_script/rep_text/
    mv /home/bandit/Script/*.mp3 //home/bandit/test_script/rep_mp3
    mv /home/bandit/Script/*.tmp /home/bandit/test_script/rep_tmp
    0
    1. Flow
       
      Salut!
      Ton shell script ma bien aidé, j'avais essayer de faire au moins aussi compliquer que toi ^^
      Maintenant j'ai une question, par exemple j'ai motion (capture webcam) qui crée des photos avec la date dedans mais il n'y a pas que la date et j'aimerais savoir si il est possible de par exemple lire qu'a partir du deuxieme caractere pour x caracteres je pense que c'est possible mais je n'ai aucune idée!et donc en fait je ferais le tri des dossiers par date merci!
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > Flow
         
        Salut,

        Regarde du côté de la commande sort (man sort) et de la syntaxe du genre :
        sort -t FS +CHAMP -k POS
        ou FS est le caractère séparateur de champs, CHAMP (un numéro) le champ à prendre en compte pour le tri et POS (un numéro aussi) le nième caractère à prendre à compte...

        ;-))
        0
      2. Flow > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        euh c'est un peu confus pour moi l'histoire du champ??
        en fait les fichiers sortis sont de se style:
        09-20070804114231.avi ou .jpg
        donc en fait ce qui m'interesse ici c'est la date 20070804 j'aimerais l'isoler dans une variable pour faire la recherche par jour et dans le dossier de nom 04/08/2007 refaire la meme chose pour les photos pour chaques heures merci :)
        0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    voici quelques commandes qui peut être pourront t'aider
    lami20j@deb:~/trash$ ls -1 *.avi
    09-20070804114231.avi
    09-20070805114231.avi
    09-20070806114231.avi
    09-20070807114231.avi
    09-20070812114231.avi
    09-20070816114231.avi
    lami20j@deb:~/trash$ ls -1 *.avi | sort --key=4,8
    09-20070804114231.avi
    09-20070805114231.avi
    09-20070806114231.avi
    09-20070807114231.avi
    09-20070812114231.avi
    09-20070816114231.avi
    lami20j@deb:~/trash$ ls -1 *.avi | grep -Eo '[0-9]{8}'
    20070804
    20070805
    20070806
    20070807
    20070812
    20070816
    
    0
    1. Flow
       
      Merci beaucoup l'ami c'est justement ce que je voulais :)
      Bonne journée ;)
      0