Recherche occurences dans 2 fichiers

Résolu
nicnictout -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,


je ne sais pas si mon titre est très parlant, c'est peut être pour cela que je ne trouve pas grand chose sur le net, alors que ma demande a déjà du être traité de nombreuses fois.
Par conséquent, désolé si la question a déjà été posée.

Je m'explique, j'ai 2 fichiers textes contenant des paths vers des fichiers ou répertoires.
Le premier fichier texte contient tous les path que je dois modifier (changement de droit), ce fichier est rempli avec une commande de la sorte:
find <partition> -xdev \( -perm -4000 -o -perm -2000 \) -type f -print


Dans mon 2ème fichier texte, j'ai plusieurs path auquel je ne dois surtout pas appliquer le changement de droit.

Comment faire pour que mon script vérifie dans le fichier 2 si le path n'est pas présent, car pour le moment il compare chaque ligne une a une.

Mon code qui marche pas:
echo -e "/bin/mount\n/bin/ping\n/bin/ping6\n" > /tmp/exclude
find $fs -xdev \( -perm -4000 -o -perm -2000 \) -type f -print > /tmp/file
for file in $(cat /tmp/file)
do
	for exclude in $(cat /tmp/exclude)
	do
		if [ $fs != $exclude ]
		then
		chmod -s $file
		fi
	done
done


D'avance merci pour toute aide, au pis si la solution existe mais que je n'ai pas les mots clés adéquats, pourriez vous me les donner svp :)
A voir également:

2 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

find $fs -xdev \( -perm -4000 -o -perm -2000 \) -type f -print > /tmp/file
for file in $(cat /tmp/file | egrep  -v '/bin/(mount|ping|ping6)')
do
	echo "chmod -s $file"
done

Si le résultat afficher te convient, restera plus qu'à virer le "echo" ;-))
1
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Je n'ai pas des moyens pour tester donc je ne suis pas sur sur la syntaxe, mais ça doit marcher avec une seul commande non?

find $fs -xdev \( -perm -4000 -o -perm -2000 \) -type f (! -name 'bin/mount' -o ! -name '/bin/ping' -o ! -name '/bin/ping6') -exec chmod -s {} \;
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Comme ça plutôt alors :

find $fs  -xdev \( -perm -4000 -o -perm -2000 \) ! \( -name 'mount' -o -name 'ping' -o -name 'ping6'  \) -type f  -exec chmod -s {} \;
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Oui, mais il ne faut pas oublier le /bin
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Non !

find: AVERTISSEMENT : les noms de fichiers Unix usuels ne contiennent pas de barre obliques (sauf pour les chemins).  Cela signifie que '-name '/bin/mount'' sera toujours évalué comme étant faux sur ce système.  Vous pouvez trouver que le test '-wholename' est plus utile, ou encore celui-ci : '-samefile'.  Alternativement, si vous utilisez GNU grep, vous pourriez utiliser 'find ... -print0 | grep -FzZ '/bin/mount''.
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Ah, d'accord. en ce cas il faut exclure autrement, mais je suis persuadé qu'une seule commande suffit ;-)
0
nicnictout
 
Salut jipicy,

décidément tu es vraiment ma roue de secours en Shell :)

Merci ca marche impec ;)
0