私のスクリプトには、ディレクトリからすべてのファイルを削除するコマンドがありますwww
。
rm -rf www/*
ただし、場合によってはwww
ディレクトリが空です。それから彼はスクリプト全体が失敗するように命じました。
空のディレクトリで失敗しないより良いコマンドがありますか?
編集:ファイルを保存したいので、隠されたファイルが削除されていない場合は完璧です.gitkeeep
。私が受け入れることができる最悪のシナリオ... && touch .gitkeep
答え1
POSIXの使用find
:
find www -path 'www/[!.]*' -prune -exec rm -r -- {} +
設計上の引数が指定されていない場合、findは失敗しません。バラよりマニュアルの例8これはこれを明らかに示しています。
オプション意味:
-path
www/
ドットで始まり、後にドットが来ないパスのみを検索することを指定します(したがって、削除リストから隠しファイルを除外します)。-prune
findがディレクトリから降りようとする試みを防ぎます(すでにこれを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 -- {} +