微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 tar 命令在 tar 中转换目录结构的方法有哪些

如何解决使用 tar 命令在 tar 中转换目录结构的方法有哪些

我想创建一个文件列表的 tar 文件文件列表应从名为 input.txt 的单独文件中读取。

这是input.txt的内容-

  • /var/opt/SM/logs/rq/log.txt
  • /var/opt/DC/mq/mqlog.txt
  • /var/opt/config.cg

压缩文件应该有目录结构-

  • /logs/SM/logs/rq/log.txt
  • /logs/DC/mq/mqlog.txt
  • /logs/config.cg

/var/opt/ 如果输入文件路径中存在,则应替换为 /logs

这是我在 root 目录中提取 tar 文件时的预期输出

  • root/logs/SM/logs/rq/log.txt
  • root/logs/DC/mq/mqlog.txt
  • root/logs/config.cg

解决方法

使用转换选项:

tar cf archive.tar --transform 's%^var/opt%logs%' /var/opt
,

下面的脚本演示了基于这些问题和答案的解决方案:

这些命令仅使用 GNU tar 进行测试。

#! /bin/sh
set -x

# prepare environment
mkdir -p foo/bar
rm -f input.txt
rm -f output.tar

for i in 1 2 3
do
        echo $i > foo/bar/file$i
        echo foo/bar/file$i >> input.txt
done

# create archive with file name transformation
tar cvf output.tar --transform='s|^foo/bar|baz|' -T input.txt

# list archive contents
tar tvf output.tar

输出

+ mkdir -p foo/bar
+ rm -f input.txt
+ rm -f output.tar
+ for i in 1 2 3
+ echo 1
+ echo foo/bar/file1
+ for i in 1 2 3
+ echo 2
+ echo foo/bar/file2
+ for i in 1 2 3
+ echo 3
+ echo foo/bar/file3
+ tar cvf output.tar '--transform=s|^foo/bar|baz|' -T input.txt
foo/bar/file1
foo/bar/file2
foo/bar/file3
+ tar tvf output.tar
-rw-r--r-- bmeissner/1049089 2 2021-07-05 16:11 baz/file1
-rw-r--r-- bmeissner/1049089 2 2021-07-05 16:11 baz/file2
-rw-r--r-- bmeissner/1049089 2 2021-07-05 16:11 baz/file3
,

这对我有用 - tar -czf myarchive.tar -T /var/opt/input.txt --transform='s|^var/opt/|logs|'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。