[Unix] déplacer fichier selon chaine contenu
Résolu
jon_chninkel
Messages postés
8
Statut
Membre
-
jon_chninkel Messages postés 8 Statut Membre -
jon_chninkel Messages postés 8 Statut Membre -
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
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
-
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).
-
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.
;-)) -
bonjour
okay okay merci pour ces encouragements ;-)
à coup de for & de grep, je le posterai quand j'aurai réussi.
bye bye -
bonjour
okay okay merci pour ces encouragements ;-)
à coup de for & de grep, je le posterai quand j'aurai réussi.
bye bye -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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-
-
Salut lami20j,
La récursivité agit sur les répertoires, là notre ami "jon" ne parle pas de récursivité dans les sous-répertoires (à moins que je n'ai pas bien saisi l'énoncé du problème et dans ce cas là je m'en excuse par avance), mais d'une recherche dans UN répertoire d'une chaîne contenue dans les fichiers dudit répertoire et d'un déplacement le cas échéant.
Et même si récursivité il y avait, on serait quand même obligé d'utiliser une boucle pour lire chacun des fichiers, enfin il me semble ;-))
-
Salut,
mais d'une recherche dans UN répertoire d'une chaîne contenue dans les fichiers dudit répertoire et d'un déplacement le cas échéant.
Encore mieux.
on serait quand même obligé d'utiliser une boucle pour lire chacun des fichiers, enfin il me semble ;-))
pour l'instant je ne dit rien. je vais essayer ce soir puisque je crois que c'est possible, sinon je n'aurai pas écrit ;)
lami20j -
re-
Bon, j'ai rien dit et t'as raison ;-((
Voilà les tests sans boucle, mais avec "awk" :[jp@MDK tmpfs] $ ls -1 fich.1 fich.10 fich.2 fich.3 fich.4 fich.5 fich.6 fich.7 fich.8 fich.9 le_rep/ [jp@MDK tmpfs] $ cat fich.* Je contiens la chaîne Bonjour Je contiens la chaîne Aurevoir Je contiens la chaîne Aurevoir Je contiens la chaîne Bonjour Je contiens la chaîne Aurevoir Je contiens la chaîne Bonjour Je contiens la chaîne Aurevoir Je contiens la chaîne Bonjour Je contiens la chaîne Aurevoir Je contiens la chaîne Bonjour [jp@MDK tmpfs] $ ls le_rep/ [jp@MDK tmpfs] $ grep Bonjour $(ls -1) | cp $(awk -F":" '{ print $1 }') le_rep/ [jp@MDK tmpfs] $ ls le_rep/ fich.1 fich.3 fich.5 fich.7 fich.9 [jp@MDK tmpfs] $ cat le_rep/* Je contiens la chaîne Bonjour Je contiens la chaîne Bonjour Je contiens la chaîne Bonjour Je contiens la chaîne Bonjour Je contiens la chaîne Bonjour [jp@MDK tmpfs] $Merci lami20j ;-))
-
-
-
Re,
voilà ma versionlami20j@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 ;) -
cp $(egrep -l Bonjour salut*) trash/
;-))
-
Bon on va clôturer là les remerciements : Merci nous et merci les z'autres !
;-)) -
-
ma solution ne marche pas bien, en fait elle semble tout me déplacer ;-(
je réessayerai les autres