Posez votre question Signaler

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

jon_chninkel 8Messages postés 8 septembre 2006Date d'inscription - Dernière réponse le 13 oct. 2006 à 08:57
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
Lire la suite 

[Unix] déplacer fichier selon chaine contenu »

21 réponses
Réponse
+0
moins plus
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).
jipicy - 8 sept. 2006 à 10:31
Arf, j'ai mis du temps à poster après la rédaction de mon post ;-(

Désolé pour le doublon ;-))
Ajouter un commentaire
Réponse
+0
moins plus
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.

;-))
Ajouter un commentaire
Réponse
+0
moins plus
bonjour

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


bye bye
Ajouter un commentaire
Réponse
+0
moins plus
bonjour

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


bye bye
Ajouter un commentaire
Réponse
+0
moins plus
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
jipicyjipicy - 12 sept. 2006 à 13:20
Comme ça peut être : unix deplacer fichier selon chaine contenu#13

;-))
tafiscobar - 12 sept. 2006 à 13:26
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".
jipicyjipicy - 12 sept. 2006 à 14:03
Ok ;-))
Ajouter un commentaire
Réponse
+0
moins plus
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 ;)
Ajouter un commentaire
Réponse
+0
moins plus
cp $(egrep -l Bonjour salut*) trash/
;-))
lami20j - 8 sept. 2006 à 19:11
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
Ajouter un commentaire
Réponse
+0
moins plus
Bon on va clôturer là les remerciements : Merci nous et merci les z'autres !

;-))
Ajouter un commentaire
Réponse
+0
moins plus
Merci donc à tous, dont moi-même ;-)
bon week-end
Ajouter un commentaire
Réponse
+0
moins plus
ma solution ne marche pas bien, en fait elle semble tout me déplacer ;-(

je réessayerai les autres
Ajouter un commentaire
Ce document intitulé « [Unix] déplacer fichier selon chaine contenu » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook