Question Existe-t-il une forme plus simple de recherche? -name "* substring_of_filename *" sur Mac OS X et Linux?


Sous Mac OS X ou Linux, existe-t-il une forme plus simple de la commande?

find . -name "*substring_of_filename*"

qui est de trouver tous les fichiers ayant des noms contenant substring_of_filename dans le répertoire courant (ou un autre répertoire donné). Étant donné que c'est une chose courante à faire, existe-t-il un moyen de raccourcir et de faciliter la saisie de la commande, en utilisant éventuellement un alias ou une fonction dans Bash? Ou existe-t-il une autre commande facile à taper qui peut être utilisée?

Tel que:

findfile . substring_of_filename

(Note: La question écrite à l'origine utilisée app_config comme exemple de substring_of_filename.)


4
2018-05-02 14:46


origine


locate app_config - knittl
@knittl: Mais locate n'est pas limité au répertoire actuel et à ses sous-répertoires. - user unknown


Réponses:


Sur Mac OS X, vous pouvez également utiliser un alias mdfind dans .bashrc:

# mdfind uses Spotlight 
alias findf='mdfind -onlyin . -name'

findf app_config

5
2018-05-07 18:01





Voici votre fonction bash, mettez-la dans .bashrc:

function findfiles { find "$1" -iname "*$2*"; }

(Notez que -iname rend la recherche insensible à la casse. Si vous ne le voulez pas, utilisez -name au lieu.)


3
2018-05-02 14:50



Vous pouvez également l'exécuter dans une session bash si vous souhaitez l'utiliser uniquement pour la session en cours. - Wuffers
iname n'est pas équivalent, name est. Cela pourrait être votre utilisation préférée, mais ce n'était pas la question. - user unknown


Au contraire! Il y en a une plus compliquée, mais une qui fonctionne:

find . -name "*app_config*"

Le point n'est pas nécessaire pour gnu-find:

find -name "*app_config*"

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 courant, qui correspondent "app_config".


2
2018-05-02 14:53



semble pas vrai au moins sur Mac OS X
Qu'est-ce qui ne semble pas vrai? Que vous pouvez omettre le point? Ou qu'un fichier qui contient «app_config» dans son nom et qui se trouve dans le répertoire en cours, restreindra la recherche à son nom. - user unknown
Je veux dire sur Mac OS X, vous pouvez utiliser find . -name *app_config* sans les guillemets
@BenU: Je n'ai pas de système avec Mac OS X, mais sous Linux, le besoin de devis provient du shell. Si je ne cite pas le "*", le shell tente de le développer. Ce n'est pas nécessaire pour trouver, et non, si le * ne correspond pas à quelque chose dans le répertoire en cours - alors il est passé inchangé pour trouver. Vous pouvez essayer des guillemets simples, qui sont autorisés aussi dans bash, mais empêcheraient l'expansion des variables (ce qui n'est pas le cas, ici, mais parfois aussi) -name "*.pdf.$id" par exemple. - user unknown
Pour le compte rendu, citations devrait être utilisé sous OS X comme sous Linux, car OS X a le même shell Bash que Linux. - Arne Stenström


Mettez ceci soit dans votre ~/.profile ou ~/.bashrc, pas sûr quel Mac utilise:

findname () 
{ 
    find . -name "*$1*"
}

puis appelez la fonction par findname name_of_file

Si vous vouliez utiliser plusieurs mots, vous deviez être plus compliqué…

findname() 
{ 
    find .|grep $1|grep $2|grep $3|grep $4 
}

Cela trouvera tous les fichiers de votre répertoire actuel, recherchera la chaîne 1, puis recherchera ce résultat pour la chaîne 2, etc., jusqu'à ce qu'il atteigne 4.


1
2018-05-04 15:18



La deuxième fonction ne fonctionne pas, sauf si les variables sont citées comme 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. - Arne Stenström


Au lieu de le faire dans un script bash, zsh, tcsh, sh, etc ... j'ai fait un TextExpander raccourci. Je tape sh≤Space≥ et les types TE

trouver . -mon nom "**"

et met le curseur entre les astérisques.


0
2018-05-04 15:43





Sous OS X, pourquoi ne pas simplement utiliser localiser? Certes, LOCAL n'est pas mis à jour très souvent par défaut, mais vous pouvez le modifier facilement (modifier la planification périodique des travaux sur OS X). Locate est un BSDism, je ne sais pas si c'est sous Linux ou non.


0
2018-05-07 01:00



Dans certains scénarios, dossierb est un risque de sécurité. Le répertoire personnel chiffré par LUKS + root non indexé + updatedb indexation / home et stockage de son cache quelque part dans / var (qui n'est pas chiffré) fuit les noms de fichiers de / home. - vtest


Sur la plupart des distributions Linux, vous pouvez utiliser la localisation. Par exemple:

$ locate find | grep bin
/sbin/findfs
/usr/bin/find
/usr/bin/find2perl
/usr/bin/findsmb
/usr/bin/gst-typefind-0.10
/usr/bin/memdiskfind
/usr/bin/oldfind
/usr/bin/sane-find-scanner
/usr/include/c++/4.5/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
/usr/include/c++/4.5/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
/usr/include/c++/4.5/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp

0
2018-05-07 01:08





Si vous utilisez bash 4 (avec shopt -s globstar) ou zsh:

prinftf %s\\n **/*substring_of_filename*

0
2018-03-28 17:16





La réponse est non". Il n'y a pas de sténographie pour msgstr "trouver le fichier par nom de fichier avec la sous-chaîne dans le répertoire courant ou au-dessous" dans GNU find. Les alias que j'utilise pour contourner cette limitation sont les suivants (pour zsh):

# find file in cwd by [S]ubstring, case [I]nsensitive, change to first sub[D]irectory
finds()   { find .  -name "*$**"; }
findsi()  { find . -iname "*$**"; }
findsid() { cd `find . -iname "*$**" | head -n1 | xargs dirname`; }

Le dernier est mon préféré. Ceux-ci peuvent être utilisés comme suit:

> ls -R
.:
file1  File2  HOLEFILE  test

./test:
hello

(c'est le répertoire de test)

> findsi file
./HOLEFILE
./File2
./file1

> finds file
./file1

> finds le
./File2
./file1

> findsid ell
> ls
hello

0
2018-04-24 09:42



Si quelqu'un les place sur son shell de choix, n'hésitez pas à modifier ce message et à ajouter votre version. - Alex Hirzel