PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Serveur - Sécurité et techniques > comp.unix.shell > multi level diff using find
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
comp.unix.shell Using and programming the Unix shell.

multi level diff using find

Réponse
 
LinkBack Outils de la discussion
Vieux 25/04/2008, 23h24   #1
Craig Hanna
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut multi level diff using find

I'm trying to diff files in different directories, but I don't want to
diff everything. The compiler produces subdirectories like debugger,
unshared, and profiled. I don't care what's in them, or if the .o
files are different. So far I've gotten this far:

export SRC=query_E
export TGT=query_D

find $SRC -name debugger -prune \
-o -name unshared -prune \
-o -name profiled -prune \
-o -name '*.c' -exec diff '{}' `echo {} | tr $SRC $TGT` \;

I don't know why tr isn't substituting $SRC for $TGT at all. It just
creates "diff query_E/... query_E/..."

What am I doing wrong?
I looked at someone else's solution which had an exec as follows:
-exec diff '{" $TGT
The problem is if find goes down more than 1 level, it will not match
$TGT anymore.

Thanks,
Craig
  Réponse avec citation
Vieux 27/04/2008, 01h20   #2
Icarus Sparry
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: multi level diff using find

On Fri, 25 Apr 2008 15:24:19 -0700, Craig Hanna wrote:

> I'm trying to diff files in different directories, but I don't want to
> diff everything. The compiler produces subdirectories like debugger,
> unshared, and profiled. I don't care what's in them, or if the .o files
> are different. So far I've gotten this far:
>
> export SRC=query_E
> export TGT=query_D
>
> find $SRC -name debugger -prune \
> -o -name unshared -prune \
> -o -name profiled -prune \
> -o -name '*.c' -exec diff '{}' `echo {} | tr $SRC $TGT` \;
>
> I don't know why tr isn't substituting $SRC for $TGT at all. It just
> creates "diff query_E/... query_E/..."
>
> What am I doing wrong?
> I looked at someone else's solution which had an exec as follows: -exec
> diff '{" $TGT
> The problem is if find goes down more than 1 level, it will not match
> $TGT anymore.
>
> Thanks,
> Craig


There are several difficulties.

'tr' is not the program you want, it does a letter by letter
substitution, and you want a word by word change. Most people use "sed"
to do this.

A second problem is that the name conversion happens *before* the find is
run. As
echo {} | tr query_E query_D
is the same as
echo {} | tr E D
and there is no E in "{}", this gives
{}
so your find command is
find query_E -name debugger .... -exec diff '{}' '{}'

If I were writing this I would probably write it as this, assuming I knew
there were no funny characters in the filenames

find $SRC -name debugger -prune \
-o -name unshared -prune \
-o -name profiled -prune \
-o -name '*.c' -print | sed "s:$SRC/\(.*\):diff & $TGT/\1:"

and when I was happy that this was doing what I wanted, I would repeat
the command and put
| sh
onto the end of it to actually run it.
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 08h31.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,10544 seconds with 10 queries