Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 是否在当前工作目录中创建tar而不包含整个父目录?_Bash_Tar - Fatal编程技术网

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,但我不想要父目录,我想将其保存在当前工作目录中

我正在使用:

''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`,无论是否为“虚线”时,它会阻塞。我在主页上找不到任何关于这种行为的提及。