Bash 是否在当前工作目录中创建tar而不包含整个父目录?
我想对一个目录(包括该目录本身)进行tar,但我不想要父目录,我想将其保存在当前工作目录中 我正在使用: ''cd/home/user/directory'' ''tar-zcvf backup.tar.gz*' 但它只保存/directory中的文件和文件夹,而不是/directory本身作为tar的头目录 此外,我希望bash脚本将tar文件保存在用户的当前工作目录中。我对bash脚本非常陌生,因此,如果有任何帮助,我将不胜感激 tar命令末尾的Bash 是否在当前工作目录中创建tar而不包含整个父目录?,bash,tar,Bash,Tar,我想对一个目录(包括该目录本身)进行tar,但我不想要父目录,我想将其保存在当前工作目录中 我正在使用: ''cd/home/user/directory'' ''tar-zcvf backup.tar.gz*' 但它只保存/directory中的文件和文件夹,而不是/directory本身作为tar的头目录 此外,我希望bash脚本将tar文件保存在用户的当前工作目录中。我对bash脚本非常陌生,因此,如果有任何帮助,我将不胜感激 tar命令末尾的*(扩展为“当前目录中的所有内容”),所有内容
*
(扩展为“当前目录中的所有内容”),所有内容都将作为参数传递给tar命令。试着跑
echo *
明白我的意思
您可能需要以下内容:
cd /home/user
tar zcvf backup.tar.gz directory
可以使用
--transform
(来自man tar
)在tar归档文件中添加前缀(并操作文件名和路径):
--转换=表达式,--xform=表达式
使用sed replace表达式转换文件名
您想添加一个目录,可以使用以下transform
表达式来完成:
's,^,directory/,'
,
=分隔符基本上可以是任何字符,只要在所有位置使用相同的字符
s
=搜索和替换
^
=行的开头
目录/
=选择的文本
基本上它说,“用目录/
替换行的开头”
例如:
→ tree -a .
.
├── dir1
│ └── file3
├── file1
└── file2
→ tar --transform 's,^,directory/,' -zvcf backup.tar.gz *
dir1/
dir1/file3
file1
file2
→ tar tf backup.tar.gz
directory/dir1/
directory/dir1/file3
directory/file1
directory/file2
→ mkdir tmp && cd tmp/
→ tar xf ../backup.tar.gz
→ tree -a .
.
└── directory
├── dir1
│ └── file3
├── file1
└── file2
我忘了提到,我认为我在使用tar-zcvf backup.tar.gz/home/user/directory时做了正确的事情,但是它也保存了/home和/user目录,我不想要
cd。。;tar-zcvf backup.tar.gz目录
cd.|{echo“出现问题!”>&2;退出1;}
以防万一cd
由于某种原因失败,您将出现一个错误,其余的代码/命令将不会执行…Gnu tar 1.29抱怨:tar:当您在选项中省略破折号时,必须指定“-Acdtrux”、“delete”或“-test label”选项之一。@Roadowl-Weird:my“tar(Gnu tar)1.29”不抱怨,白痴!我的tar被别名(可能很久以前)为tar——没有相同的权限——没有相同的所有者
,显然,当这些长选项(没有短选项等价物)前面没有一个选项-Acdtrux`,无论是否为“虚线”时,它会阻塞。我在主页上找不到任何关于这种行为的提及。