我需要使用建立目錄的存檔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 {} \;
唯一的問題是不會包含空目錄,但我認為某處有一些解決方法...