Was versuche ich zu tun?
Schreiben Sie einen Befehl, der nach Dateien sucht, die von keiner anderen Datei in meinem Projekt benötigt werden.
Was habe ich versucht?
Ich verwende find
, um eine Liste von Dateinamen zu erhalten. Jetzt möchte ich die Dateinamen als Suchzeichenfolge verwenden (und nicht die zu durchsuchende Datei).
Ich verwende find server/lib -type f -exec basename {} \; | cut -f 1 -d '.'
, um meine Liste der Dateinamen abzurufen und die Dateierweiterung zu entfernen.
Jetzt weiß ich, dass grep -R --exclude-dir=node_modules <search-string> . -l
ich in diesen Dateinamen jeden Dateinamen einfügen möchte, aber ich weiß nicht, wie ich sie als <search-string>
Argument übergeben soll.
Andere Information
Ich bin mir auch vage bewusst, dass das grep
Weiterleiten an das gesamte Ergebnis der find
(der gesamten Liste von Dateien) übergeben werden kann, was ich offensichtlich nicht tun möchte, wenn ich dies tun werde, dann sag es mir.
Auch (obwohl dies wahrscheinlich nicht im Rahmen dieser Frage liegt), da ich dies als eine Möglichkeit verwende, einen der Dateinamen grep
zu finden, für die nichts gefunden wird, wäre jeder Ratschlag zum Erhalten dieser Art von Ausgabe sehr dankbar
> <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)
quelle
xargs -I {}
das habe ich gesucht.Mit
zsh
:**/
rekursives Globbing. Ein Feature,zsh
das Anfang der 90er Jahre eingeführt wurde.(D.:t:r)
ist ein Glob-Qualifizierer, einezsh
spezifische Funktion, mit der Sie Dateien mit anderen Attributen als dem Namen auswählen oder die Sortierung ändern oder Änderungen an den gefundenen Dateien vornehmen können.D
: Punktdateien einschließen und Punktverzeichnisse wie gewohnt durchlaufenfind
. Höchstwahrscheinlich möchten Sie diesen ausziehen..
: nur reguläre Dateien (wie-type f
infind
):t
,:r
: Verlaufsmodifikatoren wie incsh
/,bash
aber hier auf die Globbed-Dateien angewendet.:t
für den Schwanz (Basisname),:r
für den Stammnamen (Erweiterung entfernt).x${^array}
verteilt die Elemente wierc
'sx^$array
oderfish
' sx$array
. Zum Beispiel wenn$array
is (1
,2
). Das wirdx1
x2
.${(u)array}
u
Entfernen Sie (für Nique) Duplikate ((u)
ein Parametererweiterungsflag).Für die Liste der Dateien , die enthalten keine der Saiten, ersetzen
-l
mit-L
(GNU vorausgesetztgrep
, aber Sie sind bereits GNU-spezifische Optionen hier verwendet wird ).-F
ist für die Suche nach festen Zeichenfolgen vorgesehen (da Sie wahrscheinlich nicht möchten, dass diese Projektnamen als reguläre Ausdrücke behandelt werden). Möglicherweise möchten Sie auch eine-w
Optiongrep
für die Wortübereinstimmung einfügen, damitfoo
diese beispielsweise nicht übereinstimmtfoobar
(würde aber trotzdem übereinstimmenfoo-bar
).quelle
projects=(server/lib/**/*(D.:t:r))
ein Array in zsh produziere. Jetzt muss ich jedoch die Dateiengrep
auflisten, in denen nichts gefunden wurde. Ich denke, ich müsste einen 0 / falschen Exit-Code abfangen?-L
am Ende der Antwort-l
sagt mir, wo das Suchergebnis war und-L
wo es nicht gefunden wurde. Aber ich möchte eine Liste der Suchbegriffe wissen , die nirgendwo gefunden wurden und nicht dort, wo sie gefunden wurden / wurden