以文件解压为例,将当前路径下的所有gz文件解压到同名的log文件中,解压命令如下所示:
ls *.gz| xargs -n 1 -P 4 -I {} bash -c 'zcat "{}" > $(echo "{}" | sed "s/gz$/log/g")'
执行结果如下图所示:
命令说明:
xargs -I {}占位的参数传递给后面的bash -c命令以进行复杂的字符串替换操作。
使用$()引用计算结果,在括号中完成文件名的编辑。括号中使用"{}"引用传入的文件名
sed "s/gz$/log/g"将echo传递的文件名中末尾的gz替换为log, gz$是正则表达式用于匹配后缀为gz的文件
也可使用下面的命令进行解压:
ls *.gz| xargs -n 1 -P 4 -I {} bash -c 'zcat "{}" > $(file="{}"; echo ${file::-3}.log)'
${file::-3}表示去掉文件名末尾的三个字符,即".gz"
运行结果和上述一致: