Comparer des nom de fichiers

Bonjour,

Je debute en shell et je tourne en rond... En fait je dois parcourir un repertoire et quand je trouve un fichier il faut que je verifie s'il est à traiter si oui, je le deplace dans un autre répertoire.
Donc ce que je fais :

for i in `find . -type f `
do
echo $i
nom_file=$(echo $i | awk 'BEGIN{FS="/"} {print $3}')
done

Pour l'instant je récupère donc les noms de fichier avec les extensions. J'aimerais ne plus avoir l'extension (je n'arrive pas à utiliser basename) et surtout pouvoir comparer ce nom à une liste

liste='fich1 fich2 fich3'

ex : si nom_file in $liste alors je le deplace

mais la je pateauge.D'une part je ne sait pas s'il vaut mieux creer ma liste de réference en passant par un tableau ou par une chaine de caracteres.
j'ai essayé : grep $nom_file $liste mais ce ne me rend rien !

Je ne suis peut être pas très claire mais si quelqu'un a à peu près compris mon problème....
Merci pour votre aide
Configuration: Windows XP
Firefox 3.0.3

4 réponses

  1. Bonjour,

    Tu peux faire :

    for i in `find . -type f `
    do
    echo $i
    nom_file=$(echo $i | awk 'BEGIN{FS="/"} {print $3}')
    nom_file_t=$(echo ${nom_file} | cut -d"." -f2) -> "." est le séparateur
    for e in $(echo $list_comparer)
    do
    if [ ${nom_file_t} = ${i} ]
    then
    mv $nom_file_t $chemin_choisi
    fi
    done
    done

    a++
    0
    1. Je me suis tromper dans la deuxième boucle ce n'est pas i mais e bien sure...
      0
      1. Merci beaucoup, je vais tester ça !
        0
        1. Modérateur
          Salut,

          Une autre façon de faire :
          [tmpfs]$ liste="fich1 fich2 fich3"
          
          [tmpfs]$ tree
          .
          |-- NameCleaner.sh
          |-- affiche_2008.pdf
          |-- foo.sh
          |-- foo.sh~
          |-- image.jpeg
          `-- rep
              |-- fich1.txt
              |-- fich2.txt
              |-- fich3.txt
              |-- fich4.txt
              `-- fich5.txt
          
          1 directory, 10 files
          
          [tmpfs]$ for fic in $liste;do find . -type f -name "${fic}*" -exec echo "cp {} /new/rep/" \; ;done
          cp ./rep/fich1.txt /new/rep/
          cp ./rep/fich2.txt /new/rep/
          cp ./rep/fich3.txt /new/rep/
          
          [tmpfs]$
          Si ça fait ce que tu veux, enlève la commande "echo" et les guillemets. Penses à créer le "/new/rep/" avant aussi...

          ;-))
          0