[Unix] déplacer fichier selon chaine contenu [Résolu/Fermé]

Signaler
Messages postés
8
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
13 octobre 2006
-
Messages postés
8
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
13 octobre 2006
-
bonjour

je suis sous unix (aix).
j'aimerais écrire un script qui me permette de déplacer tous les fichiers du répertoire REP1 contenant une chaine donnée vers un autre répertoire REP2.

exemple
sh monscript.sh CHAINE REP1 REP2

je n'ai rien trouvé dans le forum ! peut-être que je m'y suis mal pris.

je pourrai me lancer avec une boucle sur chaque fichier et tester le retour d'un grep, mais je ne trouverai pas ça très propre.

si vous avez un avis sur la question et des conseils, eje suis preneur.

merci
bonne journée !
Jon

10 réponses

Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
175
salut, ben il n'y a pas d'autre moyen. Il n'y a aucun moyen de lire ce qui se trouve dans un fichier sans l'avoir ouvert. Il n'y a aussi aucun moyen de lire d'un seul coup plusieurs fichiers, a moins de travailler avec les blocs du disque dur mais la c'est une autre paire de manche (programmation bas niveau).
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862
Arf, j'ai mis du temps à poster après la rédaction de mon post ;-(

Désolé pour le doublon ;-))
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862
Salut,

je pourrai le lancer avec une boucle sur chaque fichier et tester le retour d'un grep, mais je ne trouverai pas ça très propre.
Euh... Ben je vois pas comment faire sans une boucle et sans "grep".
Donc à mon avis c'est LA solution.

;-))
Messages postés
8
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
13 octobre 2006

bonjour

okay okay merci pour ces encouragements ;-)
à coup de for & de grep, je le posterai quand j'aurai réussi.


bye bye
Messages postés
8
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
13 octobre 2006

bonjour

okay okay merci pour ces encouragements ;-)
à coup de for & de grep, je le posterai quand j'aurai réussi.


bye bye
Messages postés
8
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
13 octobre 2006

C'est bon !

#!/bin/sh
# arg1 = chaine
# arg2 = rep source
# arg3 = rep cible
REP=`ls $2`
echo "Début Recherche - Déplacement"

for FICHIER in $REP
do
if [ ! -d $2/$FICHIER ] ; then
if [ "`head -1 $2/$FICHIER | grep $1'`" ] ; then
echo "$FICHIER déplacé"
mv $2/$FICHIER $3/$FICHIER;
fi
fi
done

echo "."


Chouette. Maintenant je dois l'éprouver.

bye bye
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543 >
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

Re,

Ben, de rien.
C'est toi qui a fait le boulot ;)

lami20j
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
175 >
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

Tu évites la boucle mais awk n'évite pas la boucle. Je ne vois toujours pas comment lire plusieurs fichiers sans boucle (implicite ou non).
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862 >
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

Comme ça peut être : unix deplacer fichier selon chaine contenu#13

;-))
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
175 >
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

ce que je voulais dire, c'est que meme si dans ton code tu évites la boucle, l'outil que tu utilises (ici egrep en particulier) lui va utiliser la boucle pour lire les fichiers que tu lui as donnés. D'ou l'utilisation du mot "implicite".
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862 >
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

Ok ;-))
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
Re,

voilà ma version
lami20j@debian:~$ ls -1 salut*
salut1
salut2
salut3
salut4
salut5
salut6
salut7
salut8
salut9
lami20j@debian:~$ cat salut*
Bonjour
Au revoir
Bonjour
Au revoir
Bonjour
Au revoir
Bonjour
Au revoir
Bonjour
lami20j@debian:~$ ls -l trash/salut*
ls: trash/salut*: Aucun fichier ou répertoire de ce type
lami20j@debian:~$ egrep -l Bonjour salut* | xargs -i{} cp {} trash/
lami20j@debian:~$ ls -l trash/salut*
-rw-r--r--  1 lami20j lami20j 8 2006-09-08 18:57 trash/salut1
-rw-r--r--  1 lami20j lami20j 8 2006-09-08 18:57 trash/salut3
-rw-r--r--  1 lami20j lami20j 8 2006-09-08 18:57 trash/salut5
-rw-r--r--  1 lami20j lami20j 8 2006-09-08 18:57 trash/salut7
-rw-r--r--  1 lami20j lami20j 8 2006-09-08 18:57 trash/salut9
lami20j@debian:~$ cat trash/salut*
Bonjour
Bonjour
Bonjour
Bonjour
Bonjour
lami20j@debian:~$  
lami20j

P.S. Jipicy c'est toi qui m'a appris xargs ;)
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862
cp $(egrep -l Bonjour salut*) trash/
;-))
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
Ben, voilà.

Les maîtres doivent se reveiller de temps en temps.
Je n'aime pas l'idée d'avoir une seule solution ;)

TMTOWTDI

There's More Than One Way To Do It

That's wonderful!!!

Merci jipicy

lami20j
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862
Bon on va clôturer là les remerciements : Merci nous et merci les z'autres !

;-))
Messages postés
8
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
13 octobre 2006

Merci donc à tous, dont moi-même ;-)
bon week-end
Messages postés
8
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
13 octobre 2006

ma solution ne marche pas bien, en fait elle semble tout me déplacer ;-(

je réessayerai les autres