Linux xargs 重命名文件的技巧
Linux xargs tricks to rename a file
我想通过
将文件复制到存档目录
- 删除 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
有什么想法吗?
您可以使用以下命令:
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
我想通过
将文件复制到存档目录- 删除 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
有什么想法吗?
您可以使用以下命令:
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