Disons qu'il y a des fichiers avec des noms:
batman.c
debate.c
cricketbat.c
Quelle commande et comment dois-je l'utiliser pour répertorier tous ces fichiers en utilisant la balise de recherche bat
?
command-line
files
search
find
srk_cb
la source
la source
Réponses:
Trouver des fichiers avec
bat
n'importe oùPour trouver tous les fichiers n'importe où à l'intérieur
/path/to/folder
dont les noms contiennentbat
, vous pouvez utiliser:J'ai cité le modèle de recherche
*bat*
parce que, si les citations ont été omis et les fichiers correspondent*bat*
dans le répertoire courant, la coquille se développera*bat*
dans une liste d'entre eux et passer que pourfind
. ensuitefind
ça ne marcherait pas bien. (\*bat\*
et"*bat*"
aussi travailler.)Pour rechercher dans le dossier dans lequel vous vous trouvez actuellement (par exemple, dans lequel vous avez
cd
édité), utilisez.
, comme d'habitude:Pour rechercher l'ensemble de votre ordinateur, utilisez
/
. Pour rechercher votre répertoire personnel, utilisez~
ou le nom complet de votre répertoire personnel. ( Le shell se développe~
sur le chemin d'accès complet de votre répertoire personnel.)Élargir ou restreindre votre recherche, en fonction du nom
Si vous souhaitez effectuer une recherche sans tenir compte de la casse, afin que les fichiers contenant
BAT
,bAt
et ainsi de suite soient mis en correspondance, utilisez le-iname
test au lieu du-name
test:J'ai remarqué que tous vos fichiers se terminent
.c
. Si vous souhaitez uniquement rechercher des fichiers comme celui-ci, utilisez:J'ai remarqué que tous vos noms de fichiers se trouvent
bat
au tout début ou à la fin de la partie précédant le.c
suffixe. Si vous voulez éviter de faire correspondre des fichiers commeembattled.c
, vous pouvez utiliser:-o
est l' opérateur or .Correspondance uniquement avec les fichiers
Pour rechercher uniquement des fichiers normaux - et non des dossiers, des liens symboliques et des nœuds de périphérique spéciaux - vous pouvez utiliser
-type f
. Ceci est fréquemment recommandé et parfois tout à fait approprié ... mais souvent pas ce que vous voulez vraiment , surtout si vous exécutezfind
dans le but d'examiner la sortie vous-même. Si vous aviez un lien symbolique correspondant à votre recherche, ne voudriez-vous pas le savoir?Si vous souhaitez trouver à la fois des fichiers normaux et des liens symboliques, vous pouvez utiliser:
Qui utilise le
-o
opérateur et également des parenthèses pour le regroupement (qui doit être cité pour que le shell ne les traite pas spécialement; sinon vous obtiendrez une erreur de syntaxe).Mais supposons que vous ne souhaitiez voir que des liens symboliques qui pointent finalement vers un fichier normal (et non des liens symboliques vers des répertoires, des nœuds de périphérique, etc.). C'est en fait encore plus simple: utilisez
-xtype
plutôt que-type
. Pourvu que vous n'êtes pas en cours d' exécutionfind
avec le-L
drapeau,-xtype
sur un lien symbolique teste le type du fichier les points de lien vers.Si vous avez un lien symbolique vers un autre lien symbolique vers un fichier,
-xtype f
il correspondra même si sa cible directe est un autre lien symbolique plutôt qu'un fichier normal. C'est presque toujours ce que vous voulez.Souvent, les gens pensent qu'ils veulent
-type f
, mais vraiment ils le veulent-xtype f
.Obtenir une sortie détaillée
find
l'action par défaut si vous n'en spécifiez pas une-print
. Toutes les commandes données ci-dessus sont équivalentes à elles-mêmes avec-print
à la fin.find
est souvent utilisé pour exécuter des commandes basées sur les fichiers trouvés - souvent, des commandes qui apportent des modifications. Mais il existe également d'autres actions dont le but est d'afficher les résultats-print
. Un intérêt particulier est-ls
:Cela donne des informations détaillées sur chaque fichier, dans un format multi-colonnes, similaire (mais pas tout à fait le même que) ce que vous verriez en exécutant .
ls file
Lectures complémentaires
Pour plus d'informations sur
find
et d'autres façons de rechercher des fichiers, voir:find
page de manuel , accessible en ligne ou en s'exécutantman find
dans un terminal.find
,locate
et lesxargs
services publics.la source
-xtype
conseils; peutls *bat*
- être et-maxdepth
/mindepth
méritent également d'être mentionnés.ls
déjà couvert , je me suis concentré sur le cas récursiffind
ici. Bien sûr, une réponse détaillée couvrant la liste non (ou moins) récursive des noms de fichiers correspondant à un modèle (ls
etfind
avec-maxdepth
) serait également utile. Vous voudrez peut-être publier une telle réponse!La façon la plus simple est de courir
De cette façon, vous pouvez rechercher dans tout l'ordinateur des fichiers contenant "bat" dans le nom du fichier
Pour actualiser la liste des fichiers sur votre PC, exécutez
Exécutez cette commande lorsque vous avez récemment ajouté de nouveaux fichiers à votre compte
la source
updatetdb
updatedb
exécution manuelle ou automatique de la dernière fois ),sudo updatedb
il faudrait d'abord l'exécuter, oui.bat
.find /
lors delocate
recherches dans une base de données, tout enfind
répertoriant récursivement/
puis en faisant correspondre l'expression régulière.Ouvrez le terminal et modifiez les répertoires dans le répertoire à partir duquel vous souhaitez commencer la recherche, puis exécutez cette commande:
La
.
commence la commande find du répertoire courant.Le
-name
correspond à la chaînebat
et est sensible à la casse. (-iname
Est sensible à la casse)Les
-type f
recherches pour les fichiers.la source
Si les fichiers se trouvent dans le répertoire courant, utilisez:
Ou (pour les avoir ligne par ligne):
Si vous souhaitez rechercher les fichiers dans le système, utilisez:
la source
Vous souhaitez utiliser la
find
commande, avec l'-iname
option de correspondance de nom de fichier insensible à la casse, ou l'-name
option de correspondance de nom de fichier sensible à la casse. Ces deux options vous permettront d'utiliser des noms génériques. Donc, pour trouver les noms de fichiers contenant "bat", vous devez utiliser:Ou
Le
*
signifie "n'importe quel caractère (s)", donc la recherche recherchebat
avec tous les caractères, y compris aucun, avant ou après. Les/
recherches à partir du répertoire racine de manière récursive, vous pouvez utiliser celle.
qui recherchera récursivement à partir du répertoire actuel, ou le chemin absolu d'où vous souhaitez rechercher. Jetez un oeil à la façon dont la recherche de fichiers à l'aide de regex dans le script shell linuxla source
-type f
, qui fait plus que simplement exclure les répertoires et n'est souvent pas ce que les utilisateurs veulent vraiment .Utilisez le bon vieux
find
.par exemple.:
de
man find
:la source