使用脚本向tar文件追加文件时如何自定义文件名
解决方案
嘿,这个跨目录追加tar文件还自定义文件名的需求,用GNU tar的几个选项就能轻松搞定,我给你拆解清楚:
核心命令(两种实用写法)
方法1:用--rename直接指定自定义名称(直观好懂)
如果你的系统用的是GNU tar(绝大多数Linux发行版默认都是),直接用--rename就能一步完成重命名+追加:
tar -rf /root/myFolder/B/archive.tar --rename=你的自定义文件名 /root/myFolder/B/foo
方法2:用--transform做路径替换(兼容性更强)
要是你担心--rename的版本兼容性,或者需要更复杂的文件名替换规则,就用--transform选项,它支持sed风格的正则替换:
tar -rf /root/myFolder/B/archive.tar --transform 's/.*foo/你的自定义文件名/' /root/myFolder/B/foo
命令参数逐个解释
-r:tar的追加模式,专门用来把新文件加入已存在的tar归档-f /root/myFolder/B/archive.tar:明确指定要操作的目标归档文件(-f是--file的缩写)--rename=xxx:直接把要追加的源文件在归档里重命名为xxx,简单粗暴--transform 's/原匹配规则/新名称/':这里的.*foo会匹配源文件的完整路径(比如/root/myFolder/B/foo),替换成你指定的自定义名称,这样归档里只会保留你想要的文件名,不会带冗长的原始路径- 最后的
/root/myFolder/B/foo:要追加的源文件绝对路径,确保跨目录操作不会因为脚本所在位置而出错
脚本里的使用示例
把上面的命令直接写到你位于/root/test/A的脚本里就行,因为全用了绝对路径,完全不受脚本所在目录的影响。比如脚本内容可以是:
#!/bin/bash # 示例:把foo追加到archive.tar,并重命名为my_custom_foo.txt tar -rf /root/myFolder/B/archive.tar --rename=my_custom_foo.txt /root/myFolder/B/foo # 如果你想用transform写法,就替换成下面这行 # tar -rf /root/myFolder/B/archive.tar --transform 's/.*foo/my_custom_foo.txt/' /root/myFolder/B/foo
验证操作是否成功
执行完脚本后,用下面的命令查看归档内容,确认自定义文件名是否生效:
tar -tf /root/myFolder/B/archive.tar
内容的提问来源于stack exchange,提问作者nilesh_101
相关产品推荐
相关产品推荐

