Linux xargs技巧重命名文件

时间:2018-12-14 03:15:17

标签: shell unix command xargs

我要通过

将文件复制到存档目录
  • 删除gz扩展名
  • 在文件名上附加日期,然后
  • 重新添加gz扩展名

这是我的尝试

find . -maxdepth 1 -name '*.gz'|xargs  -I{} cp {} archive/{}.$(date '+%Y%m%d').gz

假设有一个名为test1.txt.gz的文件

这是给我的

test1.txt.gz.20181214.gz

我想要的是

test1.txt.20181214.gz

请问有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用以下命令:

find . -maxdepth 1 -name '*.gz'| sed 's/\.gz$//' | xargs -I{} cp {}.gz archive/{}.$(date '+%Y%m%d').gz

,您可以通过sed添加中间处理以删除结尾的“ .gz”扩展名。

您还需要调整cp命令并将“ .gz”附加到将要复制的文件上,以避免文件找不到错误: cannot access '...': No such file or directory,因为xargs命令将没有完整的文件名了。

答案 1 :(得分:0)

如果您具有GNU Parallel,则它看起来像这样:

find . -maxdepth 1 -name '*.gz'| parallel cp {} archive/{.}.$(date '+%Y%m%d').gz