Comparer des nom de fichiers

Fermé
steffy74 Messages postés 25 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 5 mai 2009 - 7 nov. 2008 à 16:13
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 7 nov. 2008 à 22:42
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

4 réponses

wapette21 Messages postés 66 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 7 octobre 2010 5
7 nov. 2008 à 16:40
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 lundi 21 juillet 2008 Statut Membre Dernière intervention 7 octobre 2010 5
7 nov. 2008 à 16:41
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 vendredi 3 octobre 2008 Statut Membre Dernière intervention 5 mai 2009 1
7 nov. 2008 à 16:45
Merci beaucoup, je vais tester ça !
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
7 nov. 2008 à 22:42
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