我创建了这个简单的目录结构:
$ tree testdir/
testdir/
├── subdir1
│ ├── file1.txt
│ └── file2.txt
├── subdir2
│ ├── file3.txt
│ └── file4.txt
并希望将 testdir 的内容存档到 tar 文件中。因此我运行以下命令(注意排除是因为这个答案):
tar cvf /home/myuser/testdir/testdir_tarfile.tar --exclude=/home/myuser/testdir/testdir_tarfile.tar /home/myuser/testdir
现在我想再次提取文件(及其目录结构)。因此首先创建一个目标目录:
$ mkdir /home/myuser/testdir/target_dir
现在将 tar 文件解压到目标目录:
tar xf /home/myuser/testdir/testdir_tarfile.tar -C /home/myuser/testdir/target_dir/
生成的文件结构如下:
$ tree testdir/
testdir/
├── subdir1
│ ├── file1.txt
│ └── file2.txt
├── subdir2
│ ├── file3.txt
│ └── file4.txt
├── target_dir
│ └── home
│ └── myuser
│ └── testdir
│ ├── subdir1
│ │ ├── file1.txt
│ │ └── file2.txt
│ └── subdir2
│ ├── file3.txt
│ └── file4.txt
└── testdir_tarfile.tar
为什么目标目录现在包含子文件夹“home”和“myuser”?我希望它只包含“subdir1”和“subdir2”,即像原始存档目录一样。
您还需要
-C
在压缩期间使用该选项。例如:这基本上相当于:
从详细输出可以看出,请注意这会创建一个包含相对路径的 TAR:
如果您想要创建具有绝对路径的 TAR,或者有这样的 TAR,并且需要提取它,那么您需要通过剥离前缀来提取它,如下所示: