2011-11-07 51 views
2

我想創建一個文件tarball,但不包括目錄名稱。我知道還有另一種方式來做到這一點,但我想知道爲什麼這種方式不起作用。「tar --directory」將不起作用

如果我運行以下命令以創建由特定文件的壓縮包,然後它的工作原理:

tar -vcf file.tar -C <PATH TO DIR> file1 

不過,如果我持外卡上運行,它包含多個文件,那麼它失敗:

tar -vcf file.tar -C <PATH TO DIR> * 

我得到一個錯誤的說法,在當前DIR(不-C指定的目錄)的每個文件,tar: <FILE>: Cannot stat: No such file or directory

任何想法爲什麼在通配符和文件名上運行上述命令的行爲有所不同?

+2

這是http://s.tk/unix –

回答

4

*通配符擴展在tar之前被shell調用。 tar然後改變目錄(因爲你問了它),但是然後找不到在shell的當前目錄中的文件。

當然,在shell中更改目錄意味着您無法打開原始當前目錄中的輸出文件。所以,你必須焦油的輸出重定向子shell之外,像這樣:

(cd $DIR; tar -vc *) > file.tar 
+0

感謝尼爾一個更好的問題,非常有幫助 – PJx

+0

可能要添加一些引號,並使用'&&'只有在cd成功時才進行:'(cd「$ dir」&& exec tar -vc *)';這樣,如果目錄名稱中包含空格,我們就不會被破壞,我們不會超過必要的分支,並且如果子目錄不存在或者我們沒有權限cd進入它。 –

+0

@CharlesDuffy我覺得這是在命令行上,所以a)我只是喜歡寫'cd $ DIR'而不是'cd 'b)不管怎樣,你都有可能選擇完成目錄。 – Neil

0

你必須使用目錄:

tar -vcf files.tar /path/to/directory 

如果你的文件在您的文件夾,然後用.引用當前文件夾:

tar -vcf files.tar .