Comparer des nom de fichiers

steffy74 Messages postés 25 Statut Membre -  
jipicy Messages postés 41342 Statut Modérateur -
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
A voir également:

4 réponses

wapette21 Messages postés 68 Statut Membre 5
 
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
wapette21 Messages postés 68 Statut Membre 5
 
Je me suis tromper dans la deuxième boucle ce n'est pas i mais e bien sure...
0
steffy74 Messages postés 25 Statut Membre 1
 
Merci beaucoup, je vais tester ça !
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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