将非空输出定向到文件

将非空输出定向到文件

我只想将 find 命令的非空输出保存到文件中。如果没有输出,则不应创建文件。

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

怎么做?

答案1

实用功能ifne来自包moreutils应该可以完成你想要的:

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

从手册页中:

描述

伊夫尼当且仅当标准输入不为空时,才运行以下命令。

答案2

使用该-exec选项,仅当找到文件时才会运行:

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

解释:

  • printf "%s\n" "$@"打印每个参数时附加一个换行符。
  • sh第二个参数被sh -c分配给$0
  • {} +作为-exec参数,这些代表“所有选定的文件”。sh -c将这些分配给$1$2等。

相关内容