(時には空の)ディレクトリからすべてのファイルを削除します。

(時には空の)ディレクトリからすべてのファイルを削除します。

私のスクリプトには、ディレクトリからすべてのファイルを削除するコマンドがありますwww

rm -rf www/*

ただし、場合によってはwwwディレクトリが空です。それから彼はスクリプト全体が失敗するように命じました。

空のディレクトリで失敗しないより良いコマンドがありますか?

編集:ファイルを保存したいので、隠されたファイルが削除されていない場合は完璧です.gitkeeep。私が受け入れることができる最悪のシナリオ... && touch .gitkeep

答え1

POSIXの使用find:

find www -path 'www/[!.]*' -prune -exec rm -r -- {} +

設計上の引数が指定されていない場合、findは失敗しません。バラよりマニュアルの例8これはこれを明らかに示しています。

オプション意味:

  • -pathwww/ドットで始まり、後にドットが来ないパスのみを検索することを指定します(したがって、削除リストから隠しファイルを除外します)。

  • -prunefindがディレクトリから降りようとする試みを防ぎます(すでにこれをrm -r行うことを使用しています)。

  • --inでは、rm -r -- {} +ハイフンで始まる場合でも見つかったファイルを処理できます。

答え2

簡単な方法があります純粋なバッシュ(組み込みの場合のみ):

使用しても

set -e

ゼロ以外の終了エラーでスクリプトを停止するには、次のようにします。

shopt -s nullglob # don't treat * literally
shopt -u dotglob  # don't match .dotfiles

rm -rf  www/* 2>/dev/null || true
#             < hide err><       > 
#                      only if set -e

答え3

find www -mindepth 1 -maxdepth 1 -exec rm -r -- {} +

ディレクトリ.gitkeepにある場合は、次のことができます。www

find www -mindepth 1 -maxdepth 1 ! -name .gitkeep -exec rm -r -- {} +

関連情報