創建 tar 時是否可以排除空目錄?

創建 tar 時是否可以排除空目錄?

我有一個備份命令,如下所示:

tar cvpzf /backup/incremental-$now.tar.gz --after-date='1 day ago' -C / etc/ home/ root/  --exclude-from=/root/exclusion_list.txt --warning=no-file-unchanged > /backup/log-$now.txt 2>&1

問題是它還包括空資料夾,其中的所有檔案都未更改,因此不包含在增量備份中。我正在尋找一種方法來避免這種情況,但我找到的唯一解決方案(將 find 的結果通過管道傳輸到 tar 作為 xargs 的參數)只適用於只有一個資料夾的情況,我有三個資料夾。

答案1

預設情況下,tar 不提供跳過空目錄的方法。話雖這麼說,憑空拉出一個簡單的 shell 腳本來完成需要做的事情並不是太多工作。

這裡是一個論壇討論,當需要出現時,我找到了完全相同問題的解決方案。

主要更新:首先,我需要為我的草率複製貼上鄭重道歉。這是一個深夜的帖子,我的智力還沒有達到頂峰......

正確的論壇貼文是這裡。事實上,同一個人在不同的論壇上問同樣的問題,卻得到了完全不同的答案。當我遇到問題時,我已經為這兩個問題添加了書籤,並給出了錯誤的連結。

實際上,這裡顯示的是將 find 命令的輸出「管道」到 tar 的方法。你必須忽略所有關於「比這個人問的新」的東西。

相反,您需要的查找部分是這樣的:

find . -type d ! -empty | ...

當然,您必須將點(“.”)替換為需要 find/tar 啟動的路徑。在管道之後,按照第二個連結(正確的連結)繼續使用 tar 指令。

如果我因為不注重細節而造成任何麻煩,我再次深表歉意。

答案2

僅當您僅更改一小部分文件時才有效的另一種方法是:

tar cvzf [...] `find . -mtime -1 -type f`

如果您有大量更改,您可以將更改的檔案清單轉儲到檔案中,並在 tar 命令上使用 --files-from 參數:

find . -mtime -1 -type f > /tmp/changed.txt
tar cvzf [...] --files-from=/tmp/changed.txt

或在一行中

find . -mtime -1 -type f | tar cvzf [...] --files-from=/dev/stdin

相關內容