813 votes

Comment puis-je exclure tous les messages "permission denied" de "find"?

Je dois cacher tous les messages "permission refusée" de:

 find . > files_and_folders
 

J'expérimente quand un tel message apparaît. J'ai besoin de rassembler tous les dossiers et les fichiers, auxquels il ne se pose pas. Est-il possible de diriger les niveaux d'autorisation vers le fichier files_and_folders ? Comment puis-je cacher les erreurs en même temps?

548voto

Jonathan Leffler Points 299946

Utilisation:

 find . 2>/dev/null > files_and_folders
 

Cela cache non seulement les erreurs d'autorisation refusées, bien sûr, mais tous les messages d'erreur.

Si vous voulez vraiment garder d'autres erreurs possibles, comme trop de sauts sur un lien symbolique, mais pas les permissions refusées, alors vous devrez probablement supposer que vous n'avez pas beaucoup de fichiers appelés 'permission denied' et essaye:

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

289voto

user3701456 Points 31

Utilisation:

find . ! -readable -prune
  • pour éviter de "Permission denied"
  • ET ne suppriment PAS les (autres) des messages d'erreur
  • ET obtenir un code de sortie 0 ("tous les fichiers sont traités avec succès")

Fonctionne avec: trouver (GNU findutils) 4.4.2

Arrière-plan:

Le "lisible" test-matches de fichiers lisibles. Le "!" opérateur renvoie true, quand le test est faux. Et "! -lisible" correspond pas lisible sous répertoires et fichiers).

"-Prune" l'action ne descend pas dans le répertoire.

"! -lisible -prune" peut se traduire par: si le répertoire n'est pas lisible, ne pas descendre en elle.

Le "lisible" test prend en compte les listes de contrôle d'accès et autres autorisations d'artefacts qui l'-perm test ignore.

voir aussi trouver(1) page de manuel pour beaucoup plus de détails ...

112voto

Fatih Aksu Points 477

Si vous souhaitez démarrer la recherche de la racine "/" , vous aurez probablement voir la sortie des choses comme:

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 à super mot de passe utilisateur, lors de l'entrée le mot de passe que vous voyez le résultat de ce que vous voulez vraiment.

2) Vous pouvez utiliser rediriger la Sortie d'Erreur Standard à partir de (Généralement de l'Affichage/Écran) pour certains fichiers et d'éviter de voir les messages d'erreur sur l'écran! rediriger vers un fichier spécial /dev/null :

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

3)Vous pouvez utiliser rediriger la Sortie d'Erreur Standard à partir de (Généralement de l'Affichage/Écran) vers la sortie Standard (Généralement de l'Affichage/Écran), puis le tuyau avec la commande grep-v "inverser" paramètre de ne pas voir les lignes de sortie qui a "Permission denied" mot de paires:

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

93voto

Jeremy Points 361

Je devais utiliser:

 find / -name expect 2>/dev/null
 

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

Je m'attends à être le lieu du programme attendu que je cherchais.

30voto

sdaau Points 6262

Vous pouvez également utiliser les prédicats -perm et -prune pour éviter de descendre dans des répertoires illisibles (voir aussi Comment supprimer les instructions d 'impression "permission denied" du programme find? - Unix & Linux Stack Échange ):

 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