Linux 如何将path中的最后一个目录打包到tar文件中?
如何将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目录的包含,而没有目录本身 所以我有
/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