Comparer des nom de fichiers

steffy74 Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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 66 Date d'inscription   Statut Membre Dernière intervention   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 66 Date d'inscription   Statut Membre Dernière intervention   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 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci beaucoup, je vais tester ça !
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   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