Gibt es eine einfache Möglichkeit, alle Dateien in einer Verzeichnishierarchie rekursiv zu finden, die nicht in einer Liste von Erweiterungen enden? ZB alle Dateien, die nicht * .dll oder * .exe sind
UNIX / GNU find, so mächtig es auch ist, scheint keinen exclude
Modus zu haben (oder ich vermisse ihn), und ich fand es immer schwierig, reguläre Ausdrücke zu verwenden, um Dinge zu finden, die nicht zu einem bestimmten Ausdruck passen .
Ich bin in einer Windows-Umgebung (mit dem GnuWin32- Port der meisten GNU-Tools), daher bin ich auch offen für reine Windows-Lösungen.
command-line
find
Cristian Diaconescu
quelle
quelle
-not
kann ersetzt werden durch'!'
(Zitat wird empfohlen). Auf der anderen Seite-name
wird zwischen Groß- und Kleinschreibung unterschieden, während zwischen-iname
Groß- und Kleinschreibung unterschieden wird.quelle
-not
ist eine schlechte Option, diese!
funktioniert gut :)Die ersten beiden -name-Optionen haben keine -print-Option, daher wurden sie übersprungen. Alles andere wird gedruckt.
quelle
Mit dem Befehl grep können Sie Folgendes tun:
Das
-v
Flag aufgrep
bedeutet speziell "Finde Dinge, die nicht zu diesem Ausdruck passen".quelle
einer noch :-)
Unix-Befehlsreferenz suchen
quelle
quelle
Linux / OS X:
Suchen Sie ausgehend vom aktuellen Verzeichnis rekursiv alle Dateien, die auf .dll oder .exe enden
Suchen Sie ausgehend vom aktuellen Verzeichnis rekursiv alle Dateien, die NICHT mit .dll oder .exe enden
Anmerkungen:
(1) Die Option P in grep gibt an, dass wir den Perl-Stil verwenden, um unsere regulären Ausdrücke zu schreiben, die in Verbindung mit dem Befehl grep verwendet werden sollen . Um den Befehl grep in Verbindung mit regulären Ausdrücken auszuführen , finde ich, dass der Perl-Stil der mächtigste Stil ist, den es gibt.
(2) Die Option v in grep weist die Shell an, alle Dateien auszuschließen, die den regulären Ausdruck erfüllen
(3) Das $ -Zeichen am Ende von ".dll $" ist ein Trennzeichen-Steuerzeichen, das der Shell mitteilt, dass die Dateinamenzeichenfolge mit ".dll" endet.
quelle
Andere Lösungen auf dieser Seite sind nicht wünschenswert, wenn Sie eine lange Liste von Erweiterungen haben - eine lange Folge von Erweiterungen
-not -name 'this' -not -name 'that' -not -name 'other'
wäre mühsam und fehleranfällig - oder wenn die Suche programmgesteuert ist und die Liste der Erweiterungen zur Laufzeit erstellt wird.In solchen Situationen kann eine Lösung
find
wünschenswert sein, die Daten (die Liste der Erweiterungen) und Code (die Parameter zu ) klarer voneinander trennt . Bei einer Verzeichnis- und Dateistruktur, die folgendermaßen aussieht:Sie können so etwas tun:
Was in ... endet:
Sie können die Erweiterungsliste ändern, ohne den Codeblock zu ändern.
HINWEIS funktioniert nicht mit nativem OSX
find
- verwenden Sie stattdessen gnu find.quelle