Recherche occurences dans 2 fichiers

Résolu/Fermé
nicnictout - 13 sept. 2010 à 10:17
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 13 sept. 2010 à 11:45
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
13 sept. 2010 à 10:30
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
13 sept. 2010 à 10:54
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
13 sept. 2010 à 11:10
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
13 sept. 2010 à 11:11
Re,

Oui, mais il ne faut pas oublier le /bin
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
13 sept. 2010 à 11:13
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
13 sept. 2010 à 11:20
Re,

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

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

Merci ca marche impec ;)
0