Recherche sur le site Web

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/*

Articles connexes: