rm -rf /some/path/*
このディレクトリ(およびサブディレクトリ)から隠されていないすべてのファイルを削除します。
rm -rf /some/path/.*
そのディレクトリ(サブディレクトリを除く)のすべての隠しファイルを削除し、次のエラー/警告を表示します。
rm: cannot remove directory: `/some/dir/.'
rm: cannot remove directory: `/some/dir/..'
.
との警告/エラーを受け取らずに、ターゲットディレクトリの隠しファイルと隠しファイルとフォルダの両方を再帰的に削除する正しい方法は何ですか..
?
答え1
*
ドット以外のすべてのファイルと一致し、名前が始まるファイルを除くすべてのドットファイルと一致し、以外のすべてのファイル.[!.]*
と一致します。 3つのパターンのうちの1つが一致しない場合、存在しない引数については気にせずにそれ自体を拡張するので、実際には重要ではありません。.
..
..?*
..
.
..
rm -f
rm -rf -- ..?* .[!.]* *
を使用することもできますfind
。これはより複雑ですが、ファイルが多すぎて上記のワイルドカードがシステムコマンドラインの長さ制限を超える場合にも機能するという利点があります。
find . -name . -o -prune -exec rm -rf -- {} +
ディレクトリを削除して再作成する方がはっきりする場合があります。これは、他のプログラムが同時に元のディレクトリにファイルを作成しても、空のディレクトリが作成されるという利点(または場合によっては欠点)があります。
答え2
いつでも次にエラーメッセージを送信できます。/dev/null
rm -rf /some/path/.* 2> /dev/null
あなたも
rm -rf /some/path/
mkdir /some/path/
...それでは、まず隠しファイルについて心配する必要はありません。
答え3
これがほとんどのLinuxディストリビューションで最も便利な方法であることに気づきました。
ls -A1 | xargs rm -rf
どこ
-A
=すべてを一覧表示とは別に .
そして..
-1
=各項目を行に配置
答え4
これは次のようにする必要があります@ギルス答えがもっと簡潔です。
rm -rf {,.[!.],..?}*
または
rm -rf dir/to/files/{,.[!.],..?}*
if
安全を維持するには、次のようにスクリプトにforも追加する必要があります。
if [ -d "$DIR" ]; then
rm -rf ${DIR}/{,.[!.],..?}*
fi