Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

[Unix] déplacer fichier selon chaine contenu

jon_chninkel, le vendredi 8 septembre 2006 à 10:04:02 
 Signaler ce message aux modérateurs

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

1

tafiscobar, le vendredi 8 septembre 2006 à 10:26:24

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). tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!

Répondre à tafiscobar

3

jipicy, le vendredi 8 septembre 2006 à 10:31:04

Arf, j'ai mis du temps à poster après la rédaction de mon post ;-(

Désolé pour le doublon ;-)) Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

2

jipicy, le vendredi 8 septembre 2006 à 10:29:24

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.

;-)) Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

4

jon_chninkel, le vendredi 8 septembre 2006 à 10:50:06

Bonjour

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


bye bye

Répondre à jon_chninkel

5

jon_chninkel, le vendredi 8 septembre 2006 à 11:08:26

Bonjour

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


bye bye

Répondre à jon_chninkel

6

jon_chninkel, le vendredi 8 septembre 2006 à 11:10:39

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

Répondre à jon_chninkel

7

lami20j, le vendredi 8 septembre 2006 à 12:32:30

Salut,

il me semble qu'on n'a pas besoin de for pour faire ça.

rgrep cherche de façon recursive
grep avec globalisation
ou combinaison find avec grep

lami20j

Répondre à lami20j

8

jipicy, le vendredi 8 septembre 2006 à 14:06:05

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 ;-))
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

9

lami20j, le vendredi 8 septembre 2006 à 14:13:59

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

Répondre à lami20j

10

jipicy, le vendredi 8 septembre 2006 à 14:34:52

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 ;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

11

lami20j, le vendredi 8 septembre 2006 à 14:44:08

Re,

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

lami20j

Répondre à lami20j

17

tafiscobar, le mardi 12 septembre 2006 à 13:00:22

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). tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!

Répondre à tafiscobar

18

jipicy, le mardi 12 septembre 2006 à 13:20:18

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

;-)) Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

19

tafiscobar, le mardi 12 septembre 2006 à 13:26:02

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". tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!

Répondre à tafiscobar

20

jipicy, le mardi 12 septembre 2006 à 14:03:52

Ok ;-)) Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

12

lami20j, le vendredi 8 septembre 2006 à 18:58:32

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 ;)

Répondre à lami20j

13

jipicy, le vendredi 8 septembre 2006 à 19:05:37

cp $(egrep -l Bonjour salut*) trash/
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

14

lami20j, le vendredi 8 septembre 2006 à 19:11:35

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

Répondre à lami20j

15

jipicy, le vendredi 8 septembre 2006 à 19:15:03

Bon on va clôturer là les remerciements : Merci nous et merci les z'autres !

;-)) Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

16

jon_chninkel, le samedi 9 septembre 2006 à 16:44:38

Merci donc à tous, dont moi-même ;-)
bon week-end

Répondre à jon_chninkel

21

 jon_chninkel, le vendredi 13 octobre 2006 à 08:57:21

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

je réessayerai les autres

Répondre à jon_chninkel
Impossible déplacer fichier Bonjour, Je suis actuellement sous ubuntu 8.04LTS et j'aimerai déplacer un fichier dans /usr/local quand j'essaie via le terminal, ça marque "impossible de déplacer fichier permission non accordée" y a t'il un moyen pour mettre le fichier dans ce... www.commentcamarche.net/forum/affich-6347835-impossible-deplacer-fichier
Remplacer chaîne de caractères ds un fichier (Résolu) Bonjour Quel est la commande Unix pour remplacer une chaîne de caractère par une autre dans la première ligne d'un fichier ( et uniquement dans la première) ? Merci pour votre aide Greg www.commentcamarche.net/forum/affich-3152968-remplacer-chaine-de-caracteres-ds-un-fichier
[VB] déplacer fichiers dans dossier different (Résolu) Salut à tous, Je vousdrais savoir comment faire pour grâce à du code en VB prendre 4 fichier d'un dossier et les copier dans un autre dossier car je suis automaticien et ce que je veux faire c'est par rapport au bouton que j'appuis déplacer les... www.commentcamarche.net/forum/affich-7334872-vb-deplacer-fichiers-dans-dossier-different
[Gravure] Graver ou lire un fichier .IMG / .CCD / .SUBLes fichiers portant une extension .img, .ccd et .sub sont respectivement : IMG : une image de CD, c'est-à-dire une copie binaire d'un CD ou d'un DVD sous forme d'un fichier CCD et SUB : informations sur les pistes du disque. Les fichiers... www.commentcamarche.net/faq/sujet-3349-gravure-graver-ou-lire-un-fichier-img-ccd-sub
[Windows] Obtenir la liste des fichiers d'un dossierLister le contenu d'un dossier Voici une astuce simple qui permet de lister le nom des fichiers contenus dans un répertoire. Vous pourrez obtenir en un clic les titres de vos chansons, de vos photos, etc. dans un fichier... www.commentcamarche.net/faq/sujet-2662-windows-obtenir-la-liste-des-fichiers-d-un-dossier
[MS-Dos] Lister le contenu d'un répertoire dans un fichierIl peut s'avérer pratique d'effectuer le listage d'un ou plusieurs répertoires dans un fichier, afin de tenir par exemple un catalogue de fichiers. Sous MS-Dos (ou sous Windows en ouvrant une fenêtre d'invite de commande MS-Dos) il est possible... www.commentcamarche.net/faq/sujet-948-ms-dos-lister-le-contenu-d-un-repertoire-dans-un-fichier
Impossible déplacer fichiersbonjour , j'ai un disque dur externe (1To) branché en USB sur mon pc (window xp) . J'ai 2 dossiers différents où se trouvent dans chacun de nombreux fichiers, audio et vidéo). Je n'arrive pas à déplacer les fichiers d'un dossier à l'autre (pour tous... www.commentcamarche.net/forum/affich-2189475-impossible-deplacer-fichiers
Programme pour deplacer fichierBonjour à tous. J'ai mon disque dur partitionné en 3 parties dont une partager sur le réseau. Je voudrais faire un petit programme permettant de deplacer les fichier de ma partition partager (g:) vers une autre partition (f:). Comment je peux faire.... www.commentcamarche.net/forum/affich-1599691-programme-pour-deplacer-fichier
[commande Unix] Suppression fichiersBonjour, voila mon probleme, j'ai un repertoire avec un certain nombre de fichier (on va dire 15), je souhaite trouver une commande qui me permette de supprimer tout ces fichiers SAUF les 3 plus recents. Comment faire ? MErci www.commentcamarche.net/forum/affich-2148708-commande-unix-suppression-fichiers
UNIX - Les fichiersIntroduction aux fichiers Unix Sous les systèmes UNIX tout élément est représenté sous forme de fichier. L'ensemble des fichiers est architecturé autour d'une unique arborescence dont la base, appelée racine, est notée «/». Types de... www.commentcamarche.net/contents/unix/unix-fichiers.php3
Fichier DATFormat DAT Un fichier DAT Un fichier .dat est un fichier de données (.DAT signifie data). En général, il s'agit d'un fichier binaire, créé par un programme et utilisable uniquement par ce programme, ce qui signifie qu'il n'est pas censé être ouvert... www.commentcamarche.net/contents/fichier/dat.php3
Commandes UNIXTableau des principales commandes UNIX Commande Unix Description Options ls liste le contenu d'un répertoire -a Affiche tous les fichiers, y compris les fichiers cachés ... www.commentcamarche.net/contents/unix/unixcomm.php3