Sur Mac OS X ou Linux, existe-t-il une forme plus simple de la commande
find . -name "*substring_of_filename*"
qui consiste à trouver tous les fichiers dont le nom contient des noms substring_of_filename
dans le répertoire courant (ou un autre répertoire donné). Parce que c'est une chose courante à faire, y a-t-il un moyen de rendre la commande plus courte et plus facile à taper, en utilisant éventuellement un alias ou une fonction dans Bash? Ou existe-t-il une autre commande facile à saisir qui peut être utilisée?
Tel que:
findfile . substring_of_filename
( Remarque: la question telle qu'elle a été écrite à l'origine utilisait app_config comme exemple de substring_of_filename.)
locate app_config
locate
n'est pas limité au répertoire actuel et à ses sous-répertoires.Réponses:
Sur Mac OS X, vous pouvez également mettre un alias en utilisant
mdfind
.bashrc:la source
Voici votre fonction bash, mettez-la dans
.bashrc
:(Notez que
-iname
la recherche est insensible à la casse. Si vous ne le souhaitez pas, utilisez-name
plutôt.)la source
iname
n'est pas équivalent,name
est. Ce pourrait être votre utilisation préférée, mais ce n'était pas la question.Au contraire! Il y en a une encore plus compliquée, mais une qui marche:
Le point n'est pas nécessaire pour gnu-find:
Mais vous devez masquer les astérisques, sinon ils seront interprétés par le shell et vous ne trouverez que les noms de fichiers correspondant à ceux du répertoire en cours, qui correspondent à " app_config ".
la source
find . -name *app_config*
sans les guillemets-name "*.pdf.$id"
par exemple.Mettez ceci dans votre
~/.profile
ou~/.bashrc
non, pas sûr lequel Mac utilise:puis appelez la fonction par
findname name_of_file
Si vous voulez utiliser plusieurs mots, vous devrez être plus compliqué. La façon la plus simple de penser à moi est la suivante:
Cela trouvera tous les fichiers de votre répertoire actuel, recherchera la chaîne 1, puis le résultat pour la chaîne 2, etc., jusqu’à ce qu’il passe à 4.
la source
find . |grep "$1" |grep "$2" |grep "$3" |grep "$4"
. En outre, il recherche des parties du chemin plutôt que des parties de noms de fichiers.Au lieu de faire cela dans un script bash, zsh, tcsh, sh, etc ..., j'ai créé un raccourci TextExpander . Je tape des types sh≤Space≥ et TE
trouver . -mon nom "**"
et place le curseur entre les astérisques.
la source
Sous OS X, pourquoi ne pas utiliser simplement localiser? Accordé, la localisation ne se met pas souvent à jour par défaut, mais vous pouvez la modifier facilement (modifiez la planification périodique des travaux sous OS X). Locate est un BSDism, je ne sais pas si c'est sous Linux ou non.
la source
Sur la plupart des distributions Linux, vous pouvez utiliser la fonction de localisation. Par exemple:
la source
Si vous utilisez bash 4 (avec
shopt -s globstar
) ou zsh:la source
La réponse est non". Il n’existe aucun raccourci pour "rechercher fichier par nom de fichier avec sous-chaîne dans le répertoire actuel ou inférieur" dans GNU
find
. Les alias que j'utilise pour contourner cette limitation sont les suivants (pourzsh
):Le dernier est mon préféré. Ceux-ci peuvent être utilisés comme suit:
(c'est le répertoire de test)
la source
Je pense que juste grep peut le faire très bien, pas besoin de trouver. Options pertinentes de la page de manuel:
Notez que même si -H est la valeur par défaut lorsqu'il y a plus d'un fichier à rechercher, je vous suggère néanmoins de l'utiliser explicitement. Ce commutateur résout un problème particulier, il est préférable de garder à l'esprit cette connaissance directe- ment liée au cas de figure (recherche de plusieurs fichiers) lorsque cette option est la valeur par défaut.
La version grep de votre commande de recherche originale ressemblera à ceci:
la source