一連の手動ステップを含むタスクがあります。ステップの1つは、次のことですrm -rf *
。フォルダ内のすべてのアイテムを削除する必要がありますが、これは少し危険に見えます。ユーザーがコマンドの実行中に注意せず、間違ったフォルダーにある場合。
フォルダのすべての内容を削除する作業を安全に行う方法はありますか?
答え1
はい、ディレクトリ階層の1つ上のレベルに移動し、特定のrm -rf dirname
ディレクトリ名に対して操作を実行します(コマンドに関連するファイル名のグロービングがあってはなりません)。
これにより、残念ながら、現在の作業ディレクトリに名前は同じですが、関係のないディレクトリがある場合を除き、ユーザーは誤ったディレクトリにある場合、誤って誤ったエントリを削除しません。また、欠落している可能性のある隠しファイルとディレクトリを削除します(隠し名前を拡張しないrm -rf *
ため)。*
その後、必要に応じてディレクトリを再作成します。
別のオプションはいいえディレクトリを削除して名前を変更します(アーカイブして圧縮することもできます)。これはディレクトリの親ディレクトリでも実行でき、後でそのディレクトリからファイルを復元できます。これが実行可能なオプションであるかどうかは、ディレクトリに含まれる内容と現在の操作が実際に何であるかによって異なります。
また関連:
答え2
ユーザーが注意を払わないことが最大の懸念事項である場合は、確認を求めるのが最善です。たとえば、
delete_cwd() {
printf 'Are you sure you want to unlink everything in %s? ' "$(pwd)"
IFS= read REPLY
case $REPLY in
[yY]|[yY]es) find . -delete;;
*) return 1;;
esac
}
これは-delete
標準化されていないため、次のものを使用する必要があります。
find . ! -name . -exec rm -rf {} +
または、ユーザーがすべての削除を確認できるようにするには、その機能をスキップして次のことを直接実行できます。
find . ! -name . -depth -ok rm -rf {} +
答え3
単純な。現在のフォルダのすべての内容を削除するには:
rm -rf ./*
./現在のディレクトリに移動するので./*現在のディレクトリのすべてです。 (ちょうどポイントを忘れないでください、真剣に、ポイントを忘れないでください)
Kusalanandaの答えで述べたように、これには隠されたファイルは含まれていません。したがって、隠しファイルを削除するには別の作業を行う必要があります。rm -rf ./.*)
もっと素敵になりたい(隠しファイルを含む)すべてを一度に安全に削除するコマンド)
rm -rf ./{,.[!.],..?}*
しかし、可能ですrm -rf ./* ./.*安全でもあります(この機会をつかみたいかはよくわかりません)
完全に安全であり、どのフォルダにあるかわからない場合は、唯一の方法は次のとおりです。
rm -rf /path/to/folder/*
または
rm -rf /path/to/folder/{,.[!.],..?}*