2013-08-01 80 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 
相關問題