歸檔時排除空文件和隱藏文件

歸檔時排除空文件和隱藏文件

我需要使用建立目錄的存檔tar 在 shell 腳本中但我還應該排除隱藏檔案和大小等於0.此外,第一個命令列參數是要建立的存檔的位置,第二個是存檔的名稱,第三個是要存檔其檔案的目錄的路徑。

我嘗試在終端機中發送這樣的參數:

/bin/bash ss1 /home/user arch /home/user/folder

但它給了我一些 tar 錯誤。我嘗試像這樣存檔:

tar -cvf --exclude=.* $1/$2 $3 

但這是不正確的,我不確定正確的語法是什麼,以及如何排除空文件和隱藏文件。

答案1

既然你標記了這個,linux我就假設你有 GNUfind和 GNU tar

如果您的檔案名稱沒有嵌入換行符號並且您不想歸檔空目錄:

find "$3" -type f \! -empty \! -name '.*' | tar cvf "$1/$2" -T -

find找到相關文件,並-T -告訴tar讀取要歸檔的文件清單stdin

如果您想包含空目錄,請對此進行改進:

find "$3" \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) | \
    tar cvf "$1/$2" -T -

如果你想要處理帶有嵌入換行符的檔案名稱:

find "$3" \( \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) \) -print0 | \
    tar cvf "$1/$2" --null -T -

答案2

嘗試這個:

find test/ -not -iname ".*" -not -empty -exec tar --no-recursion -rvf file.tar {} \;

唯一的問題是不會包含空目錄,但我認為某處有一些解決方法...

相關內容