使用find命令的结果作为stdout的文件名

时间:2013-11-29 23:20:40

标签: bash terminal base64

我正在使用命令行将PNG图像转换为Base64编码的字符串。我想做的是使用find在整个目录上执行此操作。

find ./ -name "*.png" -exec base64 > out.txt {} \;

我希望能够保留源文件和结果之间的关系,而不是将所有结果存储在一个文本文件中。对于这两种解决方案,我都很无能为力:

  1. 将匹配的文件名和Base64编码的结果存储在所有匹配项的一个文本文件中(例如my_file.png = <base64-string>)。

  2. 为每个结果创建一个文本文件,其文件名与源PNG的基本名称相匹配。

  3. find命令是否提供通过变量使用匹配的文件名?可以这样做吗?

1 个答案:

答案 0 :(得分:3)

如果我很好理解您的问题,您希望将每个* .png文件转换为base64文件,并保留其名称。 现在,这应该可以解决问题:

find . -name "*png" -exec bash -c "base64 {} > {}.txt" \;

现在,假设您的目录中包含 a.png b.png c.png 文件。此命令将输出:

a.png.txt
b.png.txt
c.png.txt

文件是您需要的文本文件。

您遇到的问题实际上是如何在find中的-exec中重定向输出,这在此处得到解决:https://superuser.com/questions/231495/how-can-i-use-to-redirect-the-output-of-a-command-run-through-finds-exec