grep est utilisé pour rechercher dans un fichier pour voir si une ligne correspond à une expression régulière donnée. Cependant, j'ai cette situation - je veux écrire une expression régulière qui correspondra au nom de fichier lui-même (et non au 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 fichiers de formulaire VB qui commencent par un "f" et se terminent par .frm, j'utiliserai l'expression régulière -
"f[[:alnum:]]*\.frm"
Grep peut-il faire cela? Sinon, existe-t-il un utilitaire qui me permettrait de le faire? Merci.
-regex
option.Exemple
Du manuel:
modèle de recherche-nom
La base du nom de fichier (le chemin avec les principaux répertoires supprimés) correspond au modèle de modèle de shell. Comme les principaux répertoires sont supprimés, les noms de fichiers pris en compte pour une correspondance avec -name n'incluront jamais de barre oblique, donc "-name a / b" ne correspondra jamais à rien (vous devrez probablement utiliser -path à la place). Les métacaractères ("*", "?" Et "[]") correspondent à un "." au début du nom de base (il s'agit d'un changement dans find utils-4.2.2; voir la section CONFORMITÉ AUX NORMES ci-dessous). Pour ignorer un répertoire et les fichiers qu'il contient, utilisez -prune; voir un exemple dans la description de -path. Les accolades ne sont pas reconnues comme étant spéciales, malgré le fait que certaines coquilles, y compris Bash, imprègnent les accolades d'une signification particulière dans les motifs de coquille. La correspondance de nom de fichier est effectuée à l'aide de la fonction de bibliothèque fnmatch (3). N'oubliez pas de mettre le motif entre guillemets afin de le protéger de l'expansion par le shell.
la source
find . -maxdepth 1 -name "*filename*" -print
Comme l'a dit Pablo, vous devez utiliser à la
find
place degrep
, mais il n'est pas nécessaire de dirigerfind
versgrep
.find
a cette fonctionnalité intégrée:find
est un programme très puissant pour rechercher des fichiers par nom et prend en charge la recherche par type de fichier, la limitation de la profondeur, la combinaison de différents termes de recherche avec des opérations booléennes et l'exécution de commandes arbitraires sur les fichiers trouvés. Consultez la page de manuel find pour plus d'informations.la source
-mtime
et-mmin
Vous pouvez trouver le chemin complet d'un fichier en utilisant grep, il suffit de diriger la sortie de l'arbre
Voici une fonction que vous pouvez mettre dans votre .bash_profile ou .bashrc
la source
types_descriptor types: -
f: fichier régulier
d: répertoire
l: lien symbolique
c: périphériques de caractères
b: bloquer les périphériques
la source
-type typedescriptor
seul. Est-ce une erreur?Vous pouvez également faire:
Cela dirige la sortie de la commande tree vers grep pour une recherche. Cela vous dira seulement si le fichier existe.
la source
Non, grep fonctionne très bien pour cela:
la source
-l
et-L
.Aussi pour plusieurs fichiers.
la source
Le moyen le plus simple est
ici find listera tous les fichiers dans le répertoire courant (.) ie, récursivement. Et puis ce n'est qu'un simple grep. tous les fichiers dont le nom a "test" apparaîtront.
vous pouvez jouer avec grep selon vos besoins. Remarque: comme le grep est une classification de chaîne générique, cela peut avoir pour résultat de vous donner non seulement des noms de fichiers. mais si un chemin a un répertoire ('/xyz_test_123/other.txt') viendrait également au jeu de résultats. à votre santé
la source
./foo/bar/latest/fred.txt
.