2011-04-17 80 views
57

我工作的備份腳本,並希望焦油一個文件目錄:如何在不保留目錄結構的情況下tar目錄?

tar czf ~/backup.tgz /home/username/drupal/sites/default/files 

這措斯起來,但是當我解壓得到的文件,它包含了完整的文件結構:文件是在home/username/drupal/sites/default/files

有沒有辦法排除父目錄,以便結果tar只知道最後一個目錄(files)?

回答

23
cd /home/username/drupal/sites/default/files 
tar czf ~/backup.tgz * 
+16

您也可以使用tar的-C選項。 – GuruM 2013-07-30 12:16:44

+5

不推薦使用cd,並且容易出錯,例如大腳本或makefile。下面的答案更普遍適用和正確。 – Gregor 2015-11-05 21:54:52

138

使用--directory選項:

tar czf ~/backup.tgz --directory=/home/username/drupal/sites/default files 
+0

如果我想在這裏放2個目錄怎麼辦? – 2015-02-07 00:18:28

+0

@ user3352668只需添加兩個目錄。例如。如果默認包含「files」和「morefiles」,只需將「morefiles」添加到nbt的字符串中即可。順便說一句:最好的解決方案是nbt's,應該是公認的答案 – Anonymous 2015-08-07 07:52:22

+2

** - C DIR **與** - directory = DIR **相同​​,將目錄更改爲DIR – Markus 2016-04-28 07:12:31

0
tar -Cczf ~/backup.tgz /home/username/drupal/sites/default/files 

-C不會爲你

+0

這不起作用。參見MaikoID和Neil Butterworth的解決方案。 – Vincent 2017-03-26 20:31:41

+1

'-C'可以使用,但必須像'-C

file1 file2 ...'使用# – vyom 2017-05-04 10:30:53

30

嗨的CD我有一個更好的解決方案時,在指定目錄中輸入這是不可能的(Makefiles等)

tar -cjvf files.tar.bz2 -C directory/contents/to/be/compressed . 

不要忘了最後的點(。)!

+0

** - C DIR **與** - directory = DIR **相同​​,將目錄更改爲DIR – Markus 2016-04-28 07:12:11

+2

最後的點是否做到了? – 2017-07-05 05:36:45

+1

@BruceSun ** - C **改變你的工作目錄。點告訴tar你想存檔的目錄(即當前的工作目錄)。 – user12345 2017-10-20 00:52:30

1

/home/myuser/workspace/zip_from//home/myuser/workspace/zip_to/用gunzip所有TXT(* .txt)文件沒有源文件的目錄結構中使用以下命令:

tar -P -cvzf /home/myuser/workspace/zip_to/mydoc.tar.gz --directory="/home/myuser/workspace/zip_from/" *.txt 
+0

你[5年後](https://stackoverflow.com/a/5696001/102441)! – Eric 2016-08-20 07:38:18