Comment un “grep” pour un nom de fichier au lieu de le contenu d'un fichier?
grep est utilisé pour effectuer une recherche dans un fichier pour voir si n'importe quelle ligne correspond à une expression régulière donnée. Cependant, j'ai cette situation - je veux écrire une expression régulière qui correspond au nom de fichier lui-même (et non pas le contenu du fichier). Je vais l'exécuter à partir du répertoire racine du système, pour trouver tous les fichiers qui correspondent à l'expression régulière.
Par exemple, si je veux trouver tous les VB les fichiers qui commencent par un "f" et à la fin avec .frm, je vais utiliser l'expression régulière -
"f[[:alnum:]]*\.frm"
Peut grep faire cela? Si non, est-il un utilitaire qui serait de les laisser me faire cela? Merci.
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
find
au lieu degrep
dans ce cas.Vous pouvez également utiliser
find
en combinaison avecgrep
ouegrep
:-regex
option.Que Pablo a dit, vous devez utiliser
find
au lieu degrep
, mais il n'y a pas besoin de tuyaufind
àgrep
.find
a que des fonctionnalités intégrées dans:find
est un programme très puissant pour la recherche de fichiers par nom et prend en charge la recherche par type de fichier, la profondeur de limiter, en combinant différents termes de recherche avec les opérations booléennes, et d'exécuter des commandes arbitraires sur les fichiers trouvés. Voir le trouver la page de man pour plus d'informations.-mtime
et-mmin
Exemple
De manuel:
trouver -un modèle de nom de
Base du nom de fichier (le chemin avec les principaux répertoires supprimés) correspond à coque motif.
Parce que les principaux répertoires sont supprimés, les noms de fichier pris en considération pour un match avec -nom n'
inclure une barre oblique, de sorte que "nom-a/b" ne sera jamais correspondre à quoi que ce soit (vous avez probablement besoin d'utiliser -chemin de la place). L'
les métacaractères ("*", "?", et les "[]") correspondent à un "." au début du nom de base (ce qui est un changement dans trouver‐
utils-4.2.2; voir la section de CONFORMITÉ aux NORMES ci-dessous). Pour ignorer un répertoire et les fichiers d'application,
utilisez -prune; voir un exemple dans la description du chemin. Les accolades ne sont pas reconnus comme étant spécial,
malgré le fait que certains shells Bash imprégner des croisillons avec une signification spéciale dans la coquille de modèles.
Le nom de fichier correspondant est effectué avec l'utilisation de la fnmatch(3) fonction de la bibliothèque. N'oubliez pas de
placer le modèle dans les citations dans le but de les protéger de l'expansion par le shell.
find . -maxdepth 1 -name "*filename*" -print
Vous pouvez trouver le chemin d'accès complet d'un fichier à l'aide de grep, juste tuyau de la sortie d'arbre
Ici est une fonction que vous pouvez mettre dans votre .bash_profile ou .bashrc
type_descriptor types:-
f: fichier régulier
d: répertoire
l: lien symbolique
c: caractère appareils
b: les périphériques de bloc
-type typedescriptor
seul. Est-ce une erreur?Vous pouvez également le faire:
Ce tuyaux à la sortie de l'arbre de commande grep pour une recherche. Cela va seulement vous dire si le fichier existe bien.
Non, grep fonctionne très bien pour cela:
-l
et-L
options considérablement.Aussi pour de multiples fichiers.