Qu'est-ce que j'essaye de faire?
Écrivez une commande qui recherche les fichiers qui ne sont requis par aucun autre fichier de mon projet.
Qu'est-ce que j'ai essayé?
J'utilise find
pour obtenir une liste des noms de fichiers. Maintenant, je veux utiliser les noms de fichiers comme chaîne de recherche (plutôt que le fichier à rechercher).
J'utilise find server/lib -type f -exec basename {} \; | cut -f 1 -d '.'
pour obtenir ma liste de noms de fichiers et supprimer l'extension de fichier.
Maintenant, je sais que c'est dans ce grep -R --exclude-dir=node_modules <search-string> . -l
que je veux diriger chaque nom de fichier, mais je ne sais pas comment les passer comme <search-string>
argument.
Autre info
Je suis aussi vaguement conscient que la tuyauterie vers cela grep
pourrait passer tout le résultat de find
(la liste complète des fichiers) que je ne veux évidemment pas faire si c'est ce que je suis sur le point de me dire.
De plus, (bien que cela ne soit probablement pas dans le cadre de cette question) car j'utilise cela comme un moyen de trouver l'un des noms de fichiers qui grep
ne trouve rien pour quoi que ce soit, tout conseil sur l'obtention de ce type de sortie serait grandement apprécié
> <the-command>
filename1
server/lib/foo.js # where these are the list of files in which it appears
test/lib/foo.js
filename2
Not Found! #where `filename2` wasn't found anywhere (obviously)
la source
xargs -I {}
c'est ce que je cherchais.Avec
zsh
:**/
globbing récursif. Une fonctionnalité introduite parzsh
au début des années 90.(D.:t:r)
est un qualificatif glob, unezsh
fonctionnalité spécifique qui permet de sélectionner des fichiers en utilisant des attributs autres que le nom, ou de changer le tri ou de faire des modifications sur les fichiers trouvés.D
: inclure des fichiers de points et parcourir les répertoires de points comme vous lefind
feriez. Vous voudrez probablement retirer celui-ci..
: uniquement les fichiers normaux (comme-type f
dansfind
):t
,:r
: modificateurs d'historique comme danscsh
/bash
mais ici appliqués aux fichiers globés.:t
pour la queue (nom de base),:r
pour le nom de la racine (extension supprimée).x${^array}
distribue les éléments commerc
le ferait «x^$array
oufish
»x$array
. Par exemple, si$array
est (1
,2
). Cela devientx1
x2
.${(u)array}
(pouru
nique), supprimez les doublons ((u)
étant un indicateur d'extension de paramètre).Pour la liste des fichiers qui ne contiennent aucune chaîne , remplacez
-l
par-L
(en supposant GNUgrep
, mais vous utilisez déjà des options spécifiques à GNU ici).-F
est pour la recherche de chaînes fixes (car vous ne voulez probablement pas que ces noms de projets soient traités comme des expressions rationnelles). Vous pouvez également ajouter une-w
optiongrep
pour la correspondance de mots afin qu'ellefoo
ne corresponde pasfoobar
par exemple (correspondraitfoo-bar
quand même).la source
projects=(server/lib/**/*(D.:t:r))
production d'un tableau comme ça dans zsh. Cependant, je dois maintenant répertorier les fichiers où je n'aigrep
rien trouvé. Je suppose que je devrais attraper un code de sortie 0 / faux?-L
à la fin de la réponse-l
me dit où était le résultat de la recherche et-L
me dit où il n'a pas été trouvé. Mais je veux connaître une liste des termes de recherche qui n'ont été trouvés nulle part plutôt que où ils étaient / n'ont pas été trouvés