2009-06-27 483 views
5

場景:我在託管我的網站的服務器上有一個目錄,其中包含數百個用戶提交的圖像。我正在創建一個備份腳本,將目錄中的所有圖像壓縮成一個.tar.gz文件。我至今的命令是:

焦油-czpf /path/to/backups/my_backup.tar.gz路徑/到/圖片/

問題:沒有在我的路徑/到/圖片/我有一個名爲tmp /的目錄。當我運行該命令時,我得到一個.tar.gz文件,其中包含路徑/ to/images /目錄中的所有映像以及一個名爲tmp /的子目錄。

問題:如何獲取命令以跳過/不包含.tar.gz文件中的tmp /子目錄。Linux tar命令:壓縮一個目錄,但不包括子目錄

非常感謝。

回答

12

您正在尋找--exclude說法。

--exclude=PATTERN 

部分用戶發現exclude選項令人困惑。下面是一些常見的陷阱:

  • tar主要經營模式不會在其文件名中的一個組成部分 被排除在命令行中明確列出的路徑名 行事。在上面的示例中,如果創建 存檔並排除以*.o結尾的文件,但在列出所有選項後明確指定文件dir.o/foo的文件名稱爲 ,則將從存檔中排除 dir.o/foo

  • 有時您可能會混淆--exclude=PATTERN--exclude-from=FILE-OF-PATTERNS-X FILE-OF-PATTERNS)的含義。謹慎使用 :使用--exclude=PATTERN當要排除的文件是 作爲命令行中的模式給出時。使用 --exclude-from=FILE-OF-PATTERNS來引入文件名稱 ,其中包含模式列表,每行一個;這些 模式中的每一個都可以排除零個,一個或多個文件。

  • 當您使用--exclude=PATTERN,一定要引用PATTERN 參數,所以GNU tar看到像*通配符。如果 不這樣做,則shell可能會使用手頭的文件 擴展*本身,因此tar可能會收到一個文件列表而不是一個 模式,或者根本沒有,從而使該命令有點違法。 這可能不符合你想要的。

例如,寫:

$ tar -c -f ARCHIVE.TAR --exclude '*.o' DIRECTORY 

而不是:

$ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY 
  • 必須使用使用shell語法,或通配符,而不是regexp 語法,使用排除時選項tar。如果您嘗試使用 regexp語法來描述要排除的文件,那麼您的命令 可能會失敗。
+0

謝謝你的回答。你說得很對 - 排除可能有點混亂。直到我閱讀你的解釋之前,我自己並沒有完全理解它。謝謝 – VinkoCM 2009-06-27 16:07:28

3
tar -czpf /path/to/backups/my_backup.tar.gz --exclude path/to/images/tmp path/to/images/ 
0

這應該工作(假定的GNU tar):

tar -czpf /path/to/backups/my_backup.tar.gz --exclude=tmp path/to/images/