833 votes

Comment puis-je exclure tous les messages "permission refusée" de "find" ?

J'ai besoin de cacher tous les messages "permission refusée" de :

find . > files_and_folders

J'expérimente quand un tel message se présente. Je dois rassembler tous les dossiers et fichiers auxquels il ne s'applique pas. Est-il possible d'orienter les niveaux de permission vers le files_and_folders fichier ? Comment puis-je masquer les erreurs en même temps ?

555voto

Jonathan Leffler Points 299946

Utilisez :

find . 2>/dev/null > files_and_folders

Cela permet de masquer non seulement les erreurs de permission refusée, bien sûr, mais aussi tous les messages d'erreur.

Si vous voulez vraiment conserver d'autres erreurs possibles, telles que trop de sauts sur un lien symbolique, mais pas les erreurs liées à un refus d'autorisation, vous devrez probablement supposer que vous n'avez pas beaucoup de fichiers appelés 'permission denied' et essayer :

find . 2>&1 | grep -v 'permission denied' > files_and_folders

296voto

user3701456 Points 31

Utilisez :

find . ! -readable -prune
  • pour éviter "Permission refusée"
  • ET ne supprime pas les (autres) messages d'erreur
  • ET obtenir le statut de sortie 0 ("tous les fichiers sont traités avec succès")

Fonctionne avec : find (GNU findutils) 4.4.2

Le contexte :

Le test "-readable" correspond aux fichiers lisibles. L'opérateur " !" renvoie vrai, lorsque le test est faux. Et " ! -readable" correspond aux répertoires non lisibles (&files).

L'action "-prune" ne descend pas dans le répertoire.

" ! -readable -prune" peut être traduit par : si le répertoire n'est pas lisible, ne pas y descendre.

Le test "-readable" prend en compte les listes de contrôle d'accès et autres artefacts de permissions que le test -perm ignore.

voir aussi la page de manuel find(1) pour beaucoup, beaucoup plus de détails ...

116voto

Fatih Aksu Points 477

Si vous souhaitez lancer une recherche à partir de la racine "/", vous obtiendrez probablement un résultat du type :

find: /./proc/1731/fdinfo: Permission denied
find: /./proc/2032/task/2032/fd: Permission denied

C'est à cause de la permission. Pour résoudre ce problème :

1) Vous pouvez utiliser la commande sudo : sudo find /. -name 'toBeSearched.file' . il demande le mot de passe du super utilisateur, quand vous entrez le mot de passe vous verrez le résultat que vous voulez vraiment.

2) Vous pouvez utiliser la redirection de la sortie d'erreur standard de (généralement affichage/écran) vers un fichier quelconque et éviter de voir les messages d'erreur à l'écran ! redirection vers un fichier spécial /dev/null :

find /. -name 'toBeSearched.file' 2>/dev/null

3)Vous pouvez rediriger la sortie d'erreur standard de (généralement affichage/écran) vers la sortie standard (généralement affichage/écran), puis utiliser la commande grep avec le paramètre -v "invert" pour ne pas voir les lignes de sortie qui ont des paires de mots "Permission refusée" :

find /. -name 'toBeSearched.file' 2>&1 | grep -v 'Permission denied'

99voto

Jeremy Points 361

J'ai dû utiliser :

find / -name expect 2>/dev/null

en spécifiant le nom de ce que je voulais trouver, puis en lui disant de rediriger toutes les erreurs vers /dev/null

expect étant l'emplacement du programme expect que je recherchais.

30voto

sdaau Points 6262

Vous pouvez également utiliser le -perm et -prune pour éviter de descendre dans des répertoires illisibles (voir aussi Comment supprimer les mentions d'impression "permission refusée" du programme find ? - Unix & Linux Stack Exchange ) :

find . -type d ! -perm -g+r,u+r,o+r -prune -o -print > files_and_folders

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