アーカイブ時に空または隠しファイルを除外

アーカイブ時に空または隠しファイルを除外

以下を使用してディレクトリのアーカイブを作成する必要があります。tar シェルスクリプトからしかし、隠されたファイルとサイズが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 -指示します。tarstdin

空のディレクトリを含めるには、次の点を改善してください。

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 -

おすすめ記事