2 votes

Linux : La commande Find liste tout

C'est un cas étrange. J'utilise l'AMI Linux

[root@test /]# cat /etc/*release
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Amazon Linux AMI release 2018.03

Lorsque je fais une commande find en tant qu'utilisateur normal avec ou sans sudo par exemple

sudo find . –type f –name "*.sh" –exec grep -n “*rds.amazonaws.com” {} +

Il listera tous les fichiers du répertoire racine. Pourtant, lorsque je fais un sudo su dans le répertoire racine, la commande semble fonctionner ?

2voto

Bodo Thiesen Points 504

Dans la question, vous avez mélangé - et - ainsi que " et ". Ce sont des caractères différents. Pour moi, cette commande donne cette erreur :

find: unknown predicate `-n'

trouver interpréter –type , –name y –exec (et tout ce qu'il y a entre les deux) en tant que chemin/noms de fichier et tombe ensuite sur -n.

Veuillez vous assurer que vous avez entré la commande correctement (en ce qui concerne le problème du trait d'union/timbre).

Cependant, vous avez dit que, selon sudo vs sudo su la commande fonctionne ou pas. Je suppose donc pour l'instant qu'il s'agit d'un problème de copier-coller, comme cela a déjà été suggéré dans un commentaire. (Éventuellement, il pourrait s'agir d'un effet lié à la locale également - je n'en suis pas sûr).

Vérifiez que vous êtes dans le bon chemin.

find . -exec pwd {} + | sort -u

Devrait montrer le chemin dans lequel la commande find s'exécute (et les messages d'erreur, dus à de fausses options de ligne de commande - les chemins ajoutés par find - à pwd ).

Aussi, que grep Le regex semble être erroné : "*rds" est faux, * signifie "le caractère précédent un nombre quelconque de fois", comme grep "Hel*o" . -r cherche des fichiers, contenant le monde Heo ou Helo ou Hello ou Helllo et ainsi de suite. Si vous voulez rechercher tous les fichiers qui contiennent la chaîne de caractères rds.amazonaws.com indépendamment de ce qui est avant rds alors vous devez simplement utiliser le terme de recherche "rds\.amazonaws\.com\>" . \. parce que vous recherchez un point littéral (et non un caractère quelconque, "H.llo" recherche Hello ainsi que Hallo (et d'autres mots bidons comme H5llo ), et le \> parce que com doit être la fin du mot, donc il ne correspond pas à comic .

Si rien de tout cela ne vous aide, améliorez votre question en ajoutant des résultats de fichiers listés en fonction de ce que vous avez fait exactement.

Oh, et bienvenue à Stackoverflow, Nabil Aziz.

0voto

Dominique Points 1220

C'est une énigme pourquoi votre commande ne fonctionne pas, mais celle-ci devrait être correcte :

find . -name "*.sh" -exec grep "rds.amazonaws.com" {} \;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X