Wie kann ich die relevanten Dateien finden und mit einem Nicht-Null-Code beenden, wenn Dateien gefunden werden?
Pipe das Ergebnis an grep ''
. Das Tool ändert den Textstrom nicht, generiert jedoch einen Beendigungsstatus 0
oder 1
abhängig davon, ob eine Zeile durch den Text fließt oder nicht.
Ich weiß, du willst es andersherum. Wenn ich Sie wäre, würde ich mich an das Verhalten von grep
anpassen. Mein Grund ist: Sie möchten Dateien wissen, die Ihren Kriterien entsprechen. Der Befehl findet sie, sodass es erfolgreich ist, zu finden, ob mindestens eine Datei vorhanden ist.
Wenn Sie jedoch auf dem gegenteiligen Verhalten bestehen, negieren Sie einfach den Exit-Status . Beispiel:
! find . -name "*.xyz" -exec sh -c 'grep -L "$(basename "$1")" "$1"' sh {} \; | grep ''
Hinweis: Ich habe Ihren sh
Aufruf im Inneren debuggt find
. Ihr ursprünglicher Ansatz würde fehlschlagen, wenn er {}
erweitert wird ./a;rm -rf ~;.xyz
(dies ist in vielen Linux-Dateisystemen ein gültiger Dateiname).