2013-08-01 76 views
3

如何将路径中的最后一个目录打包成tar文件? 例如,我有几个路径如何将路径中的最后一个目录打包到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 . 

I增益DIR1目录只容纳,而不会自身。

所以我有 - my_arch.tar.gz/FILE1.TXT,FILE2.TXT,file3.txt,但我需要结构是怎样的,我的档案里 -

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

我怎样才能做到这一点?

谢谢。

回答

0

如果我明白你问的是正确的,你希望你的tar文件包含目录。

尝试没有-C标志为:

tar -czf my_arch.tar.gz /usr/local/files/dir1 
+0

我忘了 - 我不需要保存路径结构。除了最后一个文件夹。 – tenzor

+0

你能更清楚地解释“最后一个文件夹”位吗?你的意思是你只想归档由ls列出的最后一个文件夹的内容? –

+0

@AlPacifico我认为他的意思是dir1是最后一个目录,那么tar应该包含dir1/file1,file2..etc。当解开它应该提取dir1目录和里面的所有文件。我正在寻找同样的想法,但无法找到。 – kiranking

1

尝试

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

的-C指令会使你变成DIR1,因此不存档的文件夹,但它的内容:

-C, --directory DIR 
    change to directory DIR 
+0

运行大脚本时使用cd命令是不安全的。 – tenzor

+1

你没有声明你正在运行脚本。 为什么它是“不安全的”? “-C”标志也导致tar变成目录。 如果你担心不存在的目录,你可以添加错误处理'cd/usr/local/files/dir1 || { 做东西; } – omnibear

+1

此外,如果您担心在shell主线程中更改目录,可以通过添加圆括号来使用子shell: '( cd/usr/local/files tar -cvzf my_arch.tar。 gz dir1 )'。 – omnibear

1

你不能直接通过焦油做到这一点。 这是我的建议:

#!/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 
相关问题