Existe-t-il un find
programme alternatif avec une interface CLI plus conventionnelle? find
fonctionne et attend les paramètres d'une manière douloureusement différente de la plupart des autres utilitaires.
Clarification: je recherche un programme qui a principalement les mêmes fonctionnalités que find avec une interface de ligne de commande qui fonctionne et ressemble aux recommandations de ligne de commande POSIX (ou au moins GNU).
command-line
software-rec
find
utilities
Tamás Szelei
la source
la source
ack
et je me demandais s'il y avait aussi un meilleurfind
.Réponses:
Il s'agit d'une idée fausse courante.
Find suit la syntaxe des options. Vous confondez simplement les expressions primaires avec des options:
L'alternative est de localiser. Mais find implémente sa propre syntaxe d'expression car elle fournit un ensemble plus riche d'options de filtrage et d'action. Il n'y a pas d'alternative qui puisse faire la même chose, simplement parce que ce serait redondant.
la source
find
"attend les paramètres d'une manière douloureusement différente de la plupart des autres utilitaires". Vous indiquez que OP "confond les expressions primaires avec des options". La plupart des autres utils ont-ils même un concept de "primaires d'expression"? Sinon, cela ne démontre- t-il pas le point d'OP? Et ce n'est vraiment pas la partie la plus étrange de l'utilisationfind
. Quelles autres CLI impliquent{}
(lesquelles doivent bien sûr être échappées d'une manière ou d'une autre)?Cela dépend de la fonctionnalité précise
find
dont vous dépendez. S'il s'agit (principalement) de la fonction de recherche, certains shells prennent en charge les globs récursifs. Par exemple, aveczsh
:Zsh a beaucoup plus de possibilités de recherche grâce aux qualificatifs glob (regardez vers la fin de
man zshexpn
). Par exemple:ls -l **/*(.)
≈find -type f -ls
ls *(m-2u:$USER:)
≈find -mtime -2 -user $USER
Bash 4 a également
**/
(vous devez l'activer avecshopt -s globstar
), mais rien de tel que les qualificatifs glob.la source
Je voudrais jeter un oeil à
locate
. Il parcourra sa base de données de fichiers et imprimera rapidement les noms de chemin correspondant à ce que vous donnez.Comme vous pouvez le voir, c'est une correspondance de sous-texte: si vous la donnez
odg
, alors elle correspondra à d odg e. Mais si vous le donnez.odg
, ce ne sera pas le cas.Il y a cependant un inconvénient: il a besoin d'une base de données. Cette base de données doit être mise à jour lorsque les choses changent. Mon installation de Fedora 13 a cependant mis cela dans une crontab quotidienne.
la source
locate
Qu'essayez-vous de trouver? Si vous recherchez généralement des fichiers de code source, jetez un œil à
ack
. Il s'agit essentiellement d'un outil de recherche de code source, mais le-f
commutateur ack trouvera les fichiers correspondant à un type de fichier donné.Donc, si vous voulez trouver tous les fichiers Perl dans un répertoire, par exemple, juste:
Si vous n'aimez pas les types de fichiers reconnus par ack, vous pouvez ajouter les vôtres dans votre
~/.ackrc
.ack n'est pas un outil de recherche de fichiers à usage général
find
, mais si vous travaillez avec du code source, cela peut être très pratique.la source
silversearcher-ag
package sur les principales distributions.Une des grandes choses que chaque programmeur doit apprendre est: si vous ne trouvez pas d'outil, construisez le vôtre!
Je pourrais en écrire un meilleur, avec
-t
des types de filtres, etc.Edit : Ce qui précède est un script Bash. Il prend l'argument de ligne de commande et le transmet pour rechercher la valeur de l'option -name. Juste un exemple simple. Depuis que j'ai mis cette réponse, j'ai trouvé ce script python:
https://github.com/sjl/friendly-find/
L'interface a l'air sympa, mais je n'ai pas testé ses performances. Ça vaut peut-être la peine de vérifier.
la source
$<
ne fait rien d'utile dans mon Bash. Qu'attendez-vous qu'il fasse? Tu veux dire en"$@"
fait? Ou"$1"
(ce qui est essentiellement ce que cela signifie dans un Makefile)?$<
est l'csh
équivalent deread
- je suppose qu'il voulait dire cela.La façon la plus standard de trouver des choses dans Unix.
la source
grep | awk
est un contre-modèle. Voir utilisation inutile degrep
. Si vous voulez paramétrer le motif, peutdu -a | awk -v "pat=<pattern>" '$0 ~ pat { print $2 }'
awk
, mais l'un des grands avantages de la philosophie UNIX est qu'il n'est pas nécessaire de comprendre toutes les fonctionnalités des outils les plus complexes (tels queawk
etfind
) pour construire des pipelines capables de réaliser les performances souhaitées. tâche.grep | awk
peut ne pas être optimal (ou, sur un système multithread performant avec un système hautement optimiségrep
, ce serait peut-être le cas!), mais c'est simple .