Comment trouver tous les fichiers avec un texte spécifique à l'aide de Shell Linux
Objectif
L'article suivant fournit quelques conseils utiles sur la façon de trouver tous les fichiers dans un répertoire spécifique ou un système de fichiers entier contenant un mot ou une chaîne spécifique.
Difficulté
FACILE
Conventions
- # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de la commande
sudo - $ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur régulier non privilégié
Exemples
Trouver tous les fichiers avec une chaîne spécifique de manière non réalisée
Le premier exemple de commande recherchera un string stretch dans tous les fichiers dans /etc/ répertoire tout en excluant les sous-répertoires:
grep -s stretch /etc/*
/etc/os-release:PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
/etc/os-release:VERSION="9 (stretch)"
L'option -s GREP supprimera les messages d'erreur sur les fichiers inexistants ou illisibles. La sortie affiche des noms de fichiers et imprime la ligne réelle contenant une chaîne demandée.
Trouver tous les fichiers avec une chaîne spécifique récursivement
La commande ci-dessus a omis tous les sous-répertoires. Rechercher de manière récursive signifie également traverser tous les sous-répertoires. La commande Linux suivante recherchera une chaîne stretch dans tous les fichiers dans /etc/ répertoire comprenant tous les sous-répertoires:
grep -R stretch /etc/*
/etc/apt/sources.list:# deb cdrom:[Debian GNU/Linux testing _Stretch_ - Official Snapshot amd64 NETINST Binary-1 20170109-05:56]/ stretch main
/etc/apt/sources.list:#deb cdrom:[Debian GNU/Linux testing _Stretch_ - Official Snapshot amd64 NETINST Binary-1 20170109-05:56]/ stretch main
/etc/apt/sources.list:deb http://ftp.au.debian.org/debian/ stretch main
/etc/apt/sources.list:deb-src http://ftp.au.debian.org/debian/ stretch main
/etc/apt/sources.list:deb http://security.debian.org/debian-security stretch/updates main
/etc/apt/sources.list:deb-src http://security.debian.org/debian-security stretch/updates main
/etc/dictionaries-common/words:backstretch
/etc/dictionaries-common/words:backstretch's
/etc/dictionaries-common/words:backstretches
/etc/dictionaries-common/words:homestretch
/etc/dictionaries-common/words:homestretch's
/etc/dictionaries-common/words:homestretches
/etc/dictionaries-common/words:outstretch
/etc/dictionaries-common/words:outstretched
/etc/dictionaries-common/words:outstretches
/etc/dictionaries-common/words:outstretching
/etc/dictionaries-common/words:stretch
/etc/dictionaries-common/words:stretch's
/etc/dictionaries-common/words:stretched
/etc/dictionaries-common/words:stretcher
/etc/dictionaries-common/words:stretcher's
/etc/dictionaries-common/words:stretchers
/etc/dictionaries-common/words:stretches
/etc/dictionaries-common/words:stretchier
/etc/dictionaries-common/words:stretchiest
/etc/dictionaries-common/words:stretching
/etc/dictionaries-common/words:stretchy
/etc/grub.d/00_header:background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"`
/etc/os-release:PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
/etc/os-release:VERSION="9 (stretch)"
Recherchez tous les fichiers contenant un mot spécifique
L'exemple de commande grep ci-dessus répertorie tous les fichiers contenant String stretch . Ce qui signifie que les lignes avec étirent , stressé etc. sont également affichés. Utilisez l'option -w de Grep pour afficher uniquement un mot spécifique:
grep -Rw stretch /etc/*
/etc/apt/sources.list:# deb cdrom:[Debian GNU/Linux testing _Stretch_ - Official Snapshot amd64 NETINST Binary-1 20170109-05:56]/ stretch main
/etc/apt/sources.list:#deb cdrom:[Debian GNU/Linux testing _Stretch_ - Official Snapshot amd64 NETINST Binary-1 20170109-05:56]/ stretch main
/etc/apt/sources.list:deb http://ftp.au.debian.org/debian/ stretch main
/etc/apt/sources.list:deb-src http://ftp.au.debian.org/debian/ stretch main
/etc/apt/sources.list:deb http://security.debian.org/debian-security stretch/updates main
/etc/apt/sources.list:deb-src http://security.debian.org/debian-security stretch/updates main
/etc/dictionaries-common/words:stretch
/etc/dictionaries-common/words:stretch's
/etc/grub.d/00_header:background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"`
/etc/os-release:PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
/etc/os-release:VERSION="9 (stretch)"
Liste uniquement des noms de fichiers contenant un texte spécifique
Les commandes ci-dessus peuvent produire une sortie inutile. L'exemple suivant affichera uniquement tous les noms de fichiers contenant une chaîne stretch dans /etc/ répertoire récursivement:
grep -Rl stretch /etc/*
/etc/apt/sources.list
/etc/dictionaries-common/words
/etc/grub.d/00_header
/etc/os-release
Effectuer une recherche insensible à la cas
Toutes les recherches sont par défaut sensibles à la casse, ce qui signifie que toute recherche d'une chaîne stretch affichera uniquement les fichiers contenant la correspondance en majuscules et minuscules exactes. En utilisant l'option -i de Grep, la commande répertorie également toutes les lignes contenant stretch , stretch , stretch etc., Par conséquent, pour effectuer une recherche insensible à la casse.
grep -Ril stretch /etc/*
/etc/apt/sources.list
/etc/dictionaries-common/default.hash
/etc/dictionaries-common/words
/etc/grub.d/00_header
/etc/os-release
Inclure ou exclure des noms de fichiers spécifiques de la recherche
En utilisant la commande grep , il est également possible d'inclure uniquement des fichiers spécifiques dans le cadre de la recherche. Par exemple, nous souhaitons seulement rechercher un texte/chaîne spécifique dans des fichiers de configuration avec une extension .conf . L'exemple suivant trouvera tous les fichiers avec l'extension .conf dans /etc répertoire contenant String bash :
grep -Ril bash /etc/*.conf
OR
grep -Ril --include=\*.conf bash /etc/*
/etc/adduser.conf
De même, en utilisant - Exclure l'option Nous pouvons exclure les noms de fichiers spécifiques:
grep -Ril --exclude=\*.conf bash /etc/*
/etc/alternatives/view
/etc/alternatives/vim
/etc/alternatives/vi
/etc/alternatives/vimdiff
/etc/alternatives/rvim
/etc/alternatives/ex
/etc/alternatives/rview
/etc/bash.bashrc
/etc/bash_completion.d/grub
/etc/cron.daily/apt-compat
/etc/cron.daily/exim4-base
/etc/dictionaries-common/default.hash
/etc/dictionaries-common/words
/etc/inputrc
/etc/passwd
/etc/passwd-
/etc/profile
/etc/shells
/etc/skel/.profile
/etc/skel/.bashrc
/etc/skel/.bash_logout
Exclure les répertoires spécifiques de la recherche
Identique à des fichiers Grep peut également exclure des répertoires spécifiques de la recherche. Utilisez - Exclusion-diir Option pour exclure le répertoire de la recherche. L'exemple de recherche suivant trouvera tous les fichiers contenant String stretch dans /etc répertoire et excluez /etc/grub.d depuis la recherche:
grep --exclude-dir=/etc/grub.d -Rwl stretch /etc/*
/etc/apt/sources.list
/etc/dictionaries-common/words
/etc/os-release
Afficher un numéro de ligne contenant une chaîne recherchée
En utilisant -n , l'option Grep fournira également des informations concernant un numéro de ligne où la chaîne spécifique a été trouvée:
grep -Rni bash /etc/*.conf
/etc/adduser.conf:6:DSHELL=/bin/bash
Trouver tous les fichiers ne contenant pas de chaîne spécifique
Le dernier exemple utilisera l'option -v pour répertorier tous les fichiers ne contenant pas de mot-clé spécifique. Par exemple, la recherche suivante répertorie tous les fichiers dans /etc/ répertoire qui ne contient pas de chaîne stretch :
grep -Rlv stretch /etc/*