Unix查找将文件名传递给Exec并在输出重定向中

Unix查找将文件名传递给Exec并在输出重定向中,unix,find,pipe,io-redirection,Unix,Find,Pipe,Io Redirection,我想对图像目录进行base64编码,删除base64输出中的换行符。然后将其保存为.base64.txt 我可以使用以下for循环执行此操作: 用于$格式的文件(查找路径/to/images-name“*.png”);做 base64“$file”| tr-d“\n”>“$file”.base64.txt 完成 如何使用查找使用xargs或-exec执行此操作?这是一个非常接近的副本,但不包括您正在处理的案例 要获取文件名,可以运行-exec sh-c循环 find path/to/image

我想对图像目录进行base64编码,删除base64输出中的换行符。然后将其保存为
.base64.txt

我可以使用以下
for
循环执行此操作:

用于$格式的文件(查找路径/to/images-name“*.png”);做
base64“$file”| tr-d“\n”>“$file”.base64.txt
完成

如何使用
查找
使用
xargs
-exec
执行此操作?

这是一个非常接近的副本,但不包括您正在处理的案例

要获取文件名,可以运行
-exec sh-c
循环

find path/to/images -name "*.png" -exec sh -c '
     for file; do 
         base64 "$file" | tr -d "\n" > "${file}.base64.txt" 
     done' _ {} +
使用
find-exec
+
find
中的所有搜索结果一次性放入
sh-c'.
中的小脚本中。
\uuu
意味着调用显式shell来运行
'..'
中定义的脚本,并将文件名列表收集为参数

另一个使用
xargs
的替代版本与上面的循环一样昂贵,如下所示。但此版本使用
num
字符
-print0
分隔文件名,并且
xargs
在同一个字符上读取文件名,这两个字符都是GNU特定的标志

find path/to/images -name "*.png" -print0 |
    xargs -0 -I {} sh -c 'base64 {} | tr -d "\n" > {}.base64.txt'