如何用find结合xargs/-exec实现图片Base64编码并去换行保存
使用find结合-exec或xargs实现图片Base64编码并保存的方案
嘿,我来给你分享两种用find结合-exec或者xargs实现你需求的方案,比你原来的for循环更稳妥,尤其是遇到带空格的文件名时不会翻车:
方法一:find + -exec
这是最直接的写法,不需要额外管道,用-exec启动一个shell来处理批量文件:
find path/to/images -name "*.png" -exec sh -c ' for file do base64 "$file" | tr -d "\n" > "$file".base64.txt done ' sh {} +
关键点说明:
{} +会把所有匹配到的.png文件一次性传给后面的shell,避免多次启动进程,效率更高- 内部的
for file do循环会逐个处理每个文件,逻辑和你原来的for循环完全一致,但能正确处理带空格、特殊字符的文件名 sh -c后面的sh是占位的第一个参数(对应shell脚本里的$0),确保文件名能正确传递到$file变量里
方法二:find + xargs
如果你更习惯用xargs,搭配-print0和-0可以安全处理特殊文件名:
find path/to/images -name "*.png" -print0 | xargs -0 sh -c ' for file do base64 "$file" | tr -d "\n" > "$file".base64.txt done ' sh
关键点说明:
-print0让find用空字符分隔文件名,-0让xargs识别空字符作为分隔符,完美解决文件名含空格、换行符的问题- 同样通过
sh -c启动shell来处理管道传递的文件列表,内部循环逻辑和上面一致
小提示:
两种方法都比你原来的for file in $(find ...)更可靠——原来的写法会在文件名有空格时把一个文件名拆成多个,导致执行出错。如果你的文件名都是简单无特殊字符的,两种方法都能用,但优先推荐find + -exec的写法,更简洁,也少了管道的开销。
内容的提问来源于stack exchange,提问作者8bitme
相关产品推荐
相关产品推荐

