Linux xargs 重命名文件的技巧

Linux xargs tricks to rename a file

我想通过

将文件复制到存档目录

这是我的尝试

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

有什么想法吗?

您可以使用以下命令:

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 命令将不再有完整的文件名。

如果你有 GNU Parallel,它看起来像这样:

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