Ich möchte alle Dateien in einem Verzeichnis und seinen Unterverzeichnissen mit Ausnahme von Einstellungsdateien und alles in Einstellungen oder Abhängigkeitsverzeichnissen finden.Gibt es eine Möglichkeit, Ausnahmen für Ausschlüsse im Befehl find über Bash anzugeben?
Zum Beispiel möchte ich von meinen Ergebnissen ganze Verzeichnisse wie .git, .idea und node_modules sowie Dateien wie .DS_Store und config.codekit ausschließen, aber ich möchte .gitignore einschließen.
Was ich will, ist etwas wie die Ergebnisse des folgenden Git-Befehls, aber einschließlich aller nicht nachverfolgten Dateien und in der Lage, leicht und sicher bearbeitet zu werden (z. B. um Berechtigungen zu ändern). Hier
git ls-tree -r master --name-only
ist, was ich habe, so weit und obwohl es ziemlich unhandlich ist, scheint es meistens zu tun, was ich will, außer für das Weglassen .gitignore:
find . -type f -not -name ".*" -not -name config.codekit -not -path "./.*" -not -path "./node_modules/*"
Ich habe mit -prune experimentiert ohne viel Erfolg.
Gibt es eine Möglichkeit, Ausnahmen zu Ausschlüssen im Befehl find über Bash-zu sagen, etwas wie auszuschließen, alle Dinge, die dieses Muster übereinstimmen mit Ausnahme dieser Sache oder dieser Dinge?
Übrigens benutze ich derzeit OS X, aber ich benutze auch Ubuntu und ich plane, Ubuntu unter Windows zu versuchen, wenn das Windows 10 Anniversary Update allgemein verfügbar ist, also idealerweise möchte ich einen Befehl haben, der funktioniert alle von diesen.
Vielen Dank im Voraus für alle Lösungen, Erkenntnisse oder Optimierungen!
aktualisieren
Dank von gniourf-gniourf zu helfen, ich habe meinen Befehl überarbeitet. Dies scheint zu tun, was ich wollte:
find . -type f \(\! -name ".*" \! -name config.codekit \! -path "./.*" \! -path "./node_modules/*" -o -name .gitignore \)
Großen. Das ist alles hilfreich. Vielen Dank. Die Gruppierungs-, Ausschluss- und ODER-Operatoren können schwer zu befolgen sein. Mit all dem im Hinterkopf scheint dies zu tun, was ich will: 'finden. -type f \ (\! -name ". *" \! -name config.codekit \! -pfad "./.*" \! -path "./node_modules/*" -o -name .gitignore \) ' –
Es sieht so aus, als ob ich diese Klammern in diesem Fall nicht brauche, also hier ist eine kleine Revision: 'finden. -Typ f \! -Name ".*" \! -name config.codekit \! -path "./.*" \! -path "./node_modules/*" -o -name .gitignore' –
@BrianSexton: Wegen '-o' wird das' -type f'-Prädikat nicht auf das Prädikat '-name .gitignore' angewendet, also du passt auch '.gitignore' _directories_. –