4

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

/usr/local/files/dir1/

   file1.txt
   file2.txt
   file3.txt

/usr/local/files/dir2/

   file3.txt
   file4.txt
   file5.txt

如果我运行命令:

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

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

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

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

我怎么能做到这一点?

谢谢你。

4

4 回答 4

3

您不能直接通过 tar 执行此操作。这是我的建议:

#!/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  
于 2014-10-14T09:48:35.030 回答
3

尝试

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

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

 -C, --directory DIR
     change to directory DIR
于 2013-08-01T14:24:59.777 回答
0

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

尝试不带 -C 标志,如下所示:

tar -czf my_arch.tar.gz /usr/local/files/dir1
于 2013-08-01T14:22:50.090 回答
0
$ tar vczf tmp/export/files.tar.gz -C tmp/export src

files.tar.gz的结构

src
src/app
src/app/main.js
src/app/util
src/app/util/runtime.js
于 2020-10-25T04:52:40.250 回答