如何使用 xargs 重命名文件后将其传递给 tar.gz?

如何使用 xargs 重命名文件后将其传递给 tar.gz?

我正在尝试重命名日志文件并将它们打包成“tar.gz”,我使用下面的命令结束,但它没有从 STDIN(mv 命令的输出)获取重命名的文件名,并且导致该tar命令创建空文件,

find -type f -name "logs*" -exec bash -c ' \
     mv "$0" "$0_$(date -r "$0" +"%Y%m%d%H%M%S")"| \
     xargs tar -czf "$0_$(date -r "$0" +"%Y%m%d%H%M%S")".tar.gz --null -T - 
' "{}" \;

我如何使用上述命令的修订版本来 tar 重命名的文件,或者还有其他方法(在 bash shell 中)?谢谢

答案1

如果您想.tar.gz为 find 收集的每个日志文件创建一个单独的文件,则无需使用xargs。您可以将每个文件的日期附加名称保存到变量(在本例中为 f)并在命令中重复使用新名称tar。这也会保留重命名的文件。

find . -type f -iname "log*" -exec bash -c ' \
    f="${0}_$(date -r "$0" +"%Y%m%d%H%M%S")"; \
    mv "$0" "$f" && tar -czf "${f}.tar.gz" "$f" \
' "{}" \;

相关内容