找到一个文件并向其发送一些文本

找到一个文件并向其发送一些文本

我想在文件夹中查找一个文件/opt并向其发送一些文本。我尝试了以下语法:

sudo find /opt -name filename-*.conf | xargs -I '{}' echo "text_to_send" > '{}' \;

{}不幸的是,之后我找到了包含文本的文件。我尝试在命令中使用以及、、、但是,但似乎没有任何东西可以正确地用作找到的文件名的占位符。正确的语法是'{}'什么{}"{}"\{\}

答案1

尝试这个:

sudo find /opt -name filename-*.conf -exec bash -c 'echo "text_to_send" > {}' \;

bash -c为了将重定向>放在引号中,这是必要的find -exec

答案2

我认为>是在当前 shell 中解释的。这同样适用于*,即如果你碰巧filename-A.conf在当前目录中有(或更糟:更多匹配文件),那么 shell 通配符将进一步破坏你的命令。另请注意:你的仅sudo适用于find,而不适用于xargs

尝试一下(sudo如果需要的话):

find /opt -name 'filename-*.conf' -print0 | xargs -r0 sh -c 'echo "text_to_send" | tee "$0" "$@"' > /dev/null

警告: tee将覆盖文件(就像>这样做一样,所以我想这就是你想要的);用于tee -a附加。

  • find -print0甚至xargs -0可以使用奇特的文件名,
  • xargs -r如果找不到文件则不会运行,
  • sh处理内管,
  • $0" "$@"以安全的方式将所有文件名(由 后缀xargs)传递给下面的命令,sh
  • tee处理找到的一个或多个文件,
  • 最后的重定向是为了防止text_to_send出现在您的终端中。

相关内容