【问题标题】:Linux xargs tricks to rename a fileLinux xargs 重命名文件的技巧
【发布时间】:2019-01-06 11:21:46
【问题描述】:
我想通过
将文件复制到存档目录
- 删除 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
有什么想法吗?
【问题讨论】:
标签:
shell
unix
command
xargs
【解决方案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 命令将不再具有完整的文件名。
【解决方案2】:
如果你有 GNU Parallel,它看起来像这样:
find . -maxdepth 1 -name '*.gz'| parallel cp {} archive/{.}.$(date '+%Y%m%d').gz