关于linux:如何从路径中只包含tar文件的最后一个目录?

How I can pack into tar-file only last directory from path?

如何将路径中的最后一个目录打包到tar文件中?例如,我有几个路径

1
2
3
4
5
6
7
8
9
10
11
/usr/local/files/dir1/

   file1.txt
   file2.txt
   file3.txt

/usr/local/files/dir2/

   file3.txt
   file4.txt
   file5.txt

如果我运行命令:

1
tar czf my_arch.tar.gz -C /usr/local/files/dir1 .

我只得到dir1目录的包含,没有它本身。

所以我有-my-arch.tar.gz/file1.txt,file2.txt,file3.txt,但是我需要在我的档案中有这样的结构-

1
my_arch.tar.gz/dir1/file1.txt, file2.txt, file3.txt

我该怎么做?

谢谢您。


你不能直接通过tar来完成。我的建议是:

1
2
3
4
5
6
#!/bin/bash
mydir=/my_dir/whit/long_and/complicated_path/the_stuff_is_here
dirname=$(dirname $mydir )
basename=$(basename $mydir )

 tar cvf /tmp/$basename.tar    -C $dirname $basename

尝试

1
2
cd /usr/local/files
tar -cvzf my_arch.tar.gz dir1

-c指令将使您更改为dir1,因此不会对文件夹进行存档,而是将其内容:

1
2
 -C, --directory DIR
     change to directory DIR


如果我理解您的要求,您希望您的tar文件包含目录。

尝试不带-c标志,如:

1
tar -czf my_arch.tar.gz /usr/local/files/dir1