Wenn Sie zum Generieren von Dateien Vorlagen verwenden, ist es wichtig, den Namen der Vorlage in die Vorlage aufzunehmen. Beim Lesen einer generierten Datei können Sie so leichter die Vorlage finden, die zum Generieren verwendet wurde.
Ich möchte in einem Verzeichnis nach allen Vorlagen suchen, die keinen eigenen Dateinamen enthalten, die gefundenen Vorlagen drucken und mit einem Code ungleich Null beenden, wenn welche gefunden werden.
Das ist, was mir bisher eingefallen ist.
find . -name "*.xyz" -exec sh -c 'grep -L $(basename {}) {}' \;
Dadurch werden die Dateien erfolgreich gefunden und gedruckt, aber es wird mit einem Exit-Code von 0 beendet, unabhängig davon, ob Dateien gefunden werden oder nicht. Wie kann ich die relevanten Dateien finden und mit einem Code ungleich 0 beenden, wenn welche gefunden werden?
Antwort1
Wie kann ich die relevanten Dateien finden und mit einem Code ungleich Null beenden, wenn welche gefunden werden?
Leiten Sie das Ergebnis an weiter grep ''
. Das Tool ändert den Textstrom nicht, generiert jedoch einen Beendigungsstatus 0
oder , 1
je nachdem, ob eine Zeile ihn durchläuft oder nicht.
Ich weiß, dass Sie es anders wollen. Wenn ich Sie wäre, würde ich mich grep
jedoch an das Verhalten von anpassen. Meine Begründung lautet: Sie möchten Dateien kennen, die Ihren Kriterien entsprechen; der Befehl findet sie, alsogelingt esbeim Herausfinden, ob mindestens eine Datei vorhanden ist.
Wenn Sie jedoch auf dem gegenteiligen Verhalten bestehen,den Exit-Status negieren. Beispiel:
! find . -name "*.xyz" -exec sh -c 'grep -L "$(basename "$1")" "$1"' sh {} \; | grep ''
sh
Beachten Sie, dass ich Ihren Aufruf darin debuggt habe find
. Ihr ursprünglicher Ansatz würde nach hinten losgehen, wenn {}
er auf erweitert würde ./a;rm -rf ~;.xyz
(es ist ein gültiger Dateiname in vielen Linux-Dateisystemen).
Antwort2
Vielleicht grep .... && <do if found> || <do if not found>
funktioniert so etwas wie
Antwort3
for f in *.xyz; do
grep -q $f $f || echo "$f does not contain itself"
done
Sie erhalten die Liste mit den gesuchten Dateien, allerdings wird trotzdem eine Null zurückgegeben (weil das Echo erfolgreich ist).