Linux 如何将path中的最后一个目录打包到tar文件中?

Linux 如何将path中的最后一个目录打包到tar文件中?,linux,command-line,path,archive,tar,Linux,Command Line,Path,Archive,Tar,如何将path中的最后一个目录打包到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目录的包含,而没有目录本身 所以我有

如何将path中的最后一个目录打包到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
我怎么能做到


谢谢。

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

请在不使用-C标志的情况下进行尝试,如中所示:

tar -czf my_arch.tar.gz /usr/local/files/dir1
试一试

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


您不能通过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  
$tar vczf tmp/export/files.tar.gz-C tmp/export src
文件.tar.gz的结构

src
src/app
src/app/main.js
src/app/util
src/app/util/runtime.js

我忘了-我不需要保存路径结构。除了最后一个文件夹。你能更清楚地解释一下“最后一个文件夹”吗?你的意思是你只想归档ls列出的最后一个文件夹的内容吗?@AlPacifico我想他的意思是dir1是最后一个目录,那么tar应该包含dir1/file1,file2..等等。卸载时,它应该提取dir1目录和其中的所有文件。我正在查找相同的文件,但找不到。在运行大型脚本时使用cd命令是不安全的。您没有声明正在运行脚本。为什么它是“不安全的”?“-C”标志还导致tar更改到目录中。如果您担心不存在的目录,您可以添加错误处理
cd/usr/local/files/dir1 | |{dostuff;}
此外,如果您担心更改shell主线程中的目录,您可以通过添加括号来使用子shell:
(cd/usr/local/files tar-cvzf my_arch.tar.gz dir1)
。您可以让它变得复杂。为什么不对这些变量使用展开式呢?
 -C, --directory DIR
     change to directory DIR
#!/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