Nicht leere Ausgabe in eine Datei umleiten

Nicht leere Ausgabe in eine Datei umleiten

Ich möchte nur die nicht leere Ausgabe des Find-Befehls in einer Datei speichern. Wenn keine Ausgabedatei vorhanden ist, sollte sie nicht erstellt werden.

$ ls folder
aa
$ find . -name 'bb' | tee file
$ cat file
$ ls folder
aa file

Wie es geht?

Antwort1

Das Dienstprogrammifneab Paketmoreutilssollte das gewünschte Ergebnis erzielen:

$ find . -name 'bb' | ifne tee file

Aus der Manpage:

Beschreibung

wennneführt den folgenden Befehl genau dann aus, wenn die Standardeingabe nicht leer ist.

Antwort2

Verwenden Sie die -execOption, die nur ausgeführt wird, wenn Dateien gefunden werden:

find . -name 'bb' -exec sh -c 'printf "%s\n" "$@" | tee -a file' sh {} +

Erläuterung:

  • printf "%s\n" "$@"Drucken Sie jedes Argument mit einem abschließenden Zeilenumbruch.
  • shDas zweite Argument sh -cwird zugewiesen $0.
  • {} +Diese stehen als -execArgumente für "alle ausgewählten Dateien". sh -cweist diese $1, $2, usw. zu.

verwandte Informationen