我正在使用命令行将PNG图像转换为Base64编码的字符串。我想做的是使用find
在整个目录上执行此操作。
find ./ -name "*.png" -exec base64 > out.txt {} \;
我希望能够保留源文件和结果之间的关系,而不是将所有结果存储在一个文本文件中。对于这两种解决方案,我都很无能为力:
将匹配的文件名和Base64编码的结果存储在所有匹配项的一个文本文件中(例如my_file.png = <base64-string>
)。
为每个结果创建一个文本文件,其文件名与源PNG的基本名称相匹配。
find
命令是否提供通过变量使用匹配的文件名?可以这样做吗?
答案 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