Il semble qu'il y ait une petite confusion entre grep et find...
Tout d'abord qu'est-ce-que "montemplate" ? un motif du shell (du type a*.txt) ou une expression rationnelle (comme ^a.*.txt$) ?
Si c'est un motif du shell, il faut employer find . -name "template" -exec cp -f {} ; (mais attention, on différencie les majuscules des minuscules)
Si c'est une expression rationnelle, on peut utiliser find . | xargs grep -i "template" | while read; do cp $REPLY /mesresultats; done (moins élégant, mais l'option -r de grep n'est pas portable)
Il semble qu'il y ait une petite confusion entre grep et find...
Tout d'abord qu'est-ce-que "montemplate" ? un motif du shell (du type
a*.txt) ou une expression rationnelle (comme ^a.*.txt$) ?
Si c'est un motif du shell, il faut employer
find . -name "template" -exec cp -f {} ;
(mais attention, on différencie les majuscules des minuscules)
Si c'est une expression rationnelle, on peut utiliser
find . | xargs grep -i "template" |
while read; do cp $REPLY /mesresultats; done
(moins élégant, mais l'option -r de grep n'est pas portable)
Il semble qu'il y ait une petite confusion entre grep et find...
Tout d'abord qu'est-ce-que "montemplate" ? un motif du shell (du type a*.txt) ou une expression rationnelle (comme ^a.*.txt$) ?
Si c'est un motif du shell, il faut employer find . -name "template" -exec cp -f {} ; (mais attention, on différencie les majuscules des minuscules)
Si c'est une expression rationnelle, on peut utiliser find . | xargs grep -i "template" | while read; do cp $REPLY /mesresultats; done (moins élégant, mais l'option -r de grep n'est pas portable)
Encore merci pour le coup de main, mais hélas je n'ai pas obtenu le résultat escompté, j'obtiens la liste des fichiers à copier puis le message suivant: grep: xargs: No such file or directory
As-tu bien mis le « | » comme indiqué ?
Oui je l'avais mis. Mais ceci n'explique pas le fait que sous tcsh xargs ne reconnaisse pas l'option -i, d'où le problème de copie de fichiers. Xargs est-il le même sous GNU/Linux, Solaris ou BSD ? Car au regard de la man page il semble qu'il soit compatible posix 2 en ce qui me concerne (FreeBSD5.3). J'ai toujours l'erreur xargs {} no such file or directory, avec -I. Alors qu'auparavant il apparaissait -i illégal option. Je me mélange les pinceaux, mon initiation aux scripts est plus que laborieuse. Merci pour ta contribution pour tenter de résoudre mon problème.
Encore merci pour le coup de main, mais hélas je n'ai pas obtenu le
résultat escompté, j'obtiens la liste des fichiers à copier puis le
message suivant:
grep: xargs: No such file or directory
As-tu bien mis le « | » comme indiqué ?
Oui je l'avais mis. Mais ceci n'explique pas le fait que sous tcsh
xargs ne reconnaisse pas l'option -i, d'où le problème de copie de
fichiers. Xargs est-il le même sous GNU/Linux, Solaris ou BSD ? Car au
regard de la man page il semble qu'il soit compatible posix 2 en ce qui
me concerne (FreeBSD5.3).
J'ai toujours l'erreur xargs {} no such file or directory, avec -I.
Alors qu'auparavant il apparaissait -i illégal option.
Je me mélange les pinceaux, mon initiation aux scripts est plus que
laborieuse.
Merci pour ta contribution pour tenter de résoudre mon problème.
Encore merci pour le coup de main, mais hélas je n'ai pas obtenu le résultat escompté, j'obtiens la liste des fichiers à copier puis le message suivant: grep: xargs: No such file or directory
As-tu bien mis le « | » comme indiqué ?
Oui je l'avais mis. Mais ceci n'explique pas le fait que sous tcsh xargs ne reconnaisse pas l'option -i, d'où le problème de copie de fichiers. Xargs est-il le même sous GNU/Linux, Solaris ou BSD ? Car au regard de la man page il semble qu'il soit compatible posix 2 en ce qui me concerne (FreeBSD5.3). J'ai toujours l'erreur xargs {} no such file or directory, avec -I. Alors qu'auparavant il apparaissait -i illégal option. Je me mélange les pinceaux, mon initiation aux scripts est plus que laborieuse. Merci pour ta contribution pour tenter de résoudre mon problème.
J-F Garnier
Jean-François Garnier
Pascal Bourguignon wrote:
Jean-François Garnier writes:
Pascal Bourguignon wrote:
FreeSBIE User writes:
Bonjour, Débutant sous tcsh, je cherche un moyen de combiner les commandes grep et cp sous la forme suivante
Je pense qu'un script avec variable serait plus adapté mais je sèche et mes recherches sur google ne m'apportent pas la soluce à mon problème.
Par avance merci pour l'aide ou des renseignements donnés
Le problème c'est d'essayer ça avec tcsh... chsh /bin/bash ou sinon: bash -c 'grep -r -i montemplate /monpath |sed -e 's/:.*//''|while read f ; do cp "$f" /monrepertoire/mesresultats ; done' (En priant pour qu'aucun élément ne contiennent un ':' dans son nom; sinon faire: bash -c 'find /monpath -depth -name *:* -print | while read f ; do mv "$f" "$(dirname "$f")/$((echo $(basename "$f")|sed -e 's/:/--/g'))" ; done' )
Merci mais hélas, Pascal, sous Bash, ta commande ne m'apporte guère plus de résultats positifs, ça plante par: bash: line 1: unexpected EOF while looking for matching `''
Oui, il y avait une quote en trop. Voici:
bash -c 'grep -r -i montemplate /monpath |sed -e 's/:.*//'|while read f ; do cp "$f" /monrepertoire/mesresultats ; done'
Ou aussi:
bash grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do cp "$f" /monrepertoire/mesresultats done
Je suppose qu'il s'agit d'une erreur de synthaxe ou de frappe clavier car j'ai effectué cette commande en vérifiant ma frappe.
Et le copier-coller?
J'ai bien l'impression que je suis face à un problème insoluble sous cette forme, ....et il ne s'agit pourtant pas d'un exercice car je ne suis pas étudiant mais simplement passionné par le système FreeBSD que j'essaye d'employer dans mon quotidien. Mais je ne désespère pas d'y parvenir un jour.
C'est facile de construire des pipes petit à petit. Commencer par la première commande, et ajouter les commandes une après l'autre. Dans bash, on peut éditer la commande précédente avec les mêmes séquences qu'emacs (ou vi si on se le configure ainsi), C-p, C-n, C-a, C-e, C-f, C-b, C-d, etc.
grep -r -i montemplate /monpath
Puis:
grep -r -i montemplate /monpath | sed -e 's/:.*//'
Puis:
grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do echo cp "$f" /monrepertoire/mesresultats done
Puis:
grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do cp "$f" /monrepertoire/mesresultats done
Encore désolé mais ça marche pas, erreur de synthaxe while.
Je vais finir par croire que je tente un truc de fou qui n'est pas réalisable. En tout les cas merci pour le mal que vous vous donnez à résoudre un problème qui n'est pas le votre.
Je pense qu'un script avec variable serait plus adapté mais je sèche et
mes recherches sur google ne m'apportent pas la soluce à mon problème.
Par avance merci pour l'aide ou des renseignements donnés
Le problème c'est d'essayer ça avec tcsh...
chsh /bin/bash
ou sinon:
bash -c 'grep -r -i montemplate /monpath |sed -e 's/:.*//''|while
read f ; do cp "$f" /monrepertoire/mesresultats ; done'
(En priant pour qu'aucun élément ne contiennent un ':' dans son nom;
sinon faire:
bash -c 'find /monpath -depth -name *:* -print | while read f ; do mv "$f" "$(dirname "$f")/$((echo $(basename "$f")|sed -e 's/:/--/g'))" ; done'
)
Merci mais hélas, Pascal, sous Bash, ta commande ne m'apporte guère
plus de résultats positifs, ça plante par:
bash: line 1: unexpected EOF while looking for matching `''
Oui, il y avait une quote en trop. Voici:
bash -c 'grep -r -i montemplate /monpath |sed -e 's/:.*//'|while read f ; do cp "$f" /monrepertoire/mesresultats ; done'
Ou aussi:
bash
grep -r -i montemplate /monpath
| sed -e 's/:.*//'
| while read f ; do
cp "$f" /monrepertoire/mesresultats
done
Je suppose qu'il s'agit d'une erreur de synthaxe ou de frappe clavier
car j'ai effectué cette commande en vérifiant ma frappe.
Et le copier-coller?
J'ai bien l'impression que je suis face à un problème insoluble sous
cette forme, ....et il ne s'agit pourtant pas d'un exercice car je ne
suis pas étudiant mais simplement passionné par le système FreeBSD que
j'essaye d'employer dans mon quotidien. Mais je ne désespère pas d'y
parvenir un jour.
C'est facile de construire des pipes petit à petit. Commencer par la
première commande, et ajouter les commandes une après l'autre. Dans
bash, on peut éditer la commande précédente avec les mêmes séquences
qu'emacs (ou vi si on se le configure ainsi), C-p, C-n, C-a, C-e, C-f,
C-b, C-d, etc.
grep -r -i montemplate /monpath
Puis:
grep -r -i montemplate /monpath | sed -e 's/:.*//'
Puis:
grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do
echo cp "$f" /monrepertoire/mesresultats
done
Puis:
grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do
cp "$f" /monrepertoire/mesresultats
done
Encore désolé mais ça marche pas, erreur de synthaxe while.
Je vais finir par croire que je tente un truc de fou qui n'est pas
réalisable.
En tout les cas merci pour le mal que vous vous donnez à résoudre un
problème qui n'est pas le votre.
Je pense qu'un script avec variable serait plus adapté mais je sèche et mes recherches sur google ne m'apportent pas la soluce à mon problème.
Par avance merci pour l'aide ou des renseignements donnés
Le problème c'est d'essayer ça avec tcsh... chsh /bin/bash ou sinon: bash -c 'grep -r -i montemplate /monpath |sed -e 's/:.*//''|while read f ; do cp "$f" /monrepertoire/mesresultats ; done' (En priant pour qu'aucun élément ne contiennent un ':' dans son nom; sinon faire: bash -c 'find /monpath -depth -name *:* -print | while read f ; do mv "$f" "$(dirname "$f")/$((echo $(basename "$f")|sed -e 's/:/--/g'))" ; done' )
Merci mais hélas, Pascal, sous Bash, ta commande ne m'apporte guère plus de résultats positifs, ça plante par: bash: line 1: unexpected EOF while looking for matching `''
Oui, il y avait une quote en trop. Voici:
bash -c 'grep -r -i montemplate /monpath |sed -e 's/:.*//'|while read f ; do cp "$f" /monrepertoire/mesresultats ; done'
Ou aussi:
bash grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do cp "$f" /monrepertoire/mesresultats done
Je suppose qu'il s'agit d'une erreur de synthaxe ou de frappe clavier car j'ai effectué cette commande en vérifiant ma frappe.
Et le copier-coller?
J'ai bien l'impression que je suis face à un problème insoluble sous cette forme, ....et il ne s'agit pourtant pas d'un exercice car je ne suis pas étudiant mais simplement passionné par le système FreeBSD que j'essaye d'employer dans mon quotidien. Mais je ne désespère pas d'y parvenir un jour.
C'est facile de construire des pipes petit à petit. Commencer par la première commande, et ajouter les commandes une après l'autre. Dans bash, on peut éditer la commande précédente avec les mêmes séquences qu'emacs (ou vi si on se le configure ainsi), C-p, C-n, C-a, C-e, C-f, C-b, C-d, etc.
grep -r -i montemplate /monpath
Puis:
grep -r -i montemplate /monpath | sed -e 's/:.*//'
Puis:
grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do echo cp "$f" /monrepertoire/mesresultats done
Puis:
grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do cp "$f" /monrepertoire/mesresultats done
Encore désolé mais ça marche pas, erreur de synthaxe while.
Je vais finir par croire que je tente un truc de fou qui n'est pas réalisable. En tout les cas merci pour le mal que vous vous donnez à résoudre un problème qui n'est pas le votre.
J-F Garnier
Pascal Bourguignon
Jean-François Garnier writes:
Pascal Bourguignon wrote:
Ou aussi: bash grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do cp "$f" /monrepertoire/mesresultats done
C'est facile de construire des pipes petit à petit. Commencer par la première commande, et ajouter les commandes une après l'autre. Dans bash, on peut éditer la commande précédente avec les mêmes séquences qu'emacs (ou vi si on se le configure ainsi), C-p, C-n, C-a, C-e, C-f, C-b, C-d, etc. grep -r -i montemplate /monpath Puis: grep -r -i montemplate /monpath | sed -e 's/:.*//' Puis: grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do echo cp "$f" /monrepertoire/mesresultats done Puis: grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do cp "$f" /monrepertoire/mesresultats done
Encore désolé mais ça marche pas, erreur de synthaxe while.
As tu bien commencé par taper:
bash RETURN
avant de taper ces commandes?
Je vais finir par croire que je tente un truc de fou qui n'est pas réalisable.
Oui, avec tcsh, c'est assez délicat...
En tout les cas merci pour le mal que vous vous donnez à résoudre un problème qui n'est pas le votre.
Ou aussi:
bash
grep -r -i montemplate /monpath
| sed -e 's/:.*//'
| while read f ; do
cp "$f" /monrepertoire/mesresultats
done
C'est facile de construire des pipes petit à petit. Commencer par la
première commande, et ajouter les commandes une après l'autre. Dans
bash, on peut éditer la commande précédente avec les mêmes séquences
qu'emacs (ou vi si on se le configure ainsi), C-p, C-n, C-a, C-e, C-f,
C-b, C-d, etc.
grep -r -i montemplate /monpath
Puis:
grep -r -i montemplate /monpath | sed -e 's/:.*//'
Puis:
grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ;
do
echo cp "$f" /monrepertoire/mesresultats
done
Puis:
grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ;
do
cp "$f" /monrepertoire/mesresultats
done
Encore désolé mais ça marche pas, erreur de synthaxe while.
As tu bien commencé par taper:
bash RETURN
avant de taper ces commandes?
Je vais finir par croire que je tente un truc de fou qui n'est pas
réalisable.
Oui, avec tcsh, c'est assez délicat...
En tout les cas merci pour le mal que vous vous donnez à résoudre un
problème qui n'est pas le votre.
Ou aussi: bash grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do cp "$f" /monrepertoire/mesresultats done
C'est facile de construire des pipes petit à petit. Commencer par la première commande, et ajouter les commandes une après l'autre. Dans bash, on peut éditer la commande précédente avec les mêmes séquences qu'emacs (ou vi si on se le configure ainsi), C-p, C-n, C-a, C-e, C-f, C-b, C-d, etc. grep -r -i montemplate /monpath Puis: grep -r -i montemplate /monpath | sed -e 's/:.*//' Puis: grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do echo cp "$f" /monrepertoire/mesresultats done Puis: grep -r -i montemplate /monpath | sed -e 's/:.*//' | while read f ; do cp "$f" /monrepertoire/mesresultats done
Encore désolé mais ça marche pas, erreur de synthaxe while.
As tu bien commencé par taper:
bash RETURN
avant de taper ces commandes?
Je vais finir par croire que je tente un truc de fou qui n'est pas réalisable.
Oui, avec tcsh, c'est assez délicat...
En tout les cas merci pour le mal que vous vous donnez à résoudre un problème qui n'est pas le votre.