ディレクトリの内容を削除する正しい方法

ディレクトリの内容を削除する正しい方法

削除する正しい方法は何ですかみんなディレクトリの内容にディレクトリが表示されていませんか?
たとえば、次のようなディレクトリ構造があります。

foo/
    bar1/
    bar2/
    x.txt

bar1フォルダとbar2ファイルを削除したいx.txt削除しないでください foo

また、無視またはエラーを引き起こす可能性がある特殊文字を含むファイル名も考慮してください。


編集#1(9月30日18:26 UTC):
私の質問は重複しているようではありません。この問題、削除を要請したためすべては目次内にありますが、他の質問は目次に含まれておらず、回答にはそのような解決策は含まれていません。

答え1

ディレクトリがわかっている場合は、次のいずれかのコマンドを使用して実行できます。

$ find foo/* -delete

$ rm -fr foo/*

$ find foo/* -exec rm -fr {} +

ファイルが.ドット()で始まる場合は、が必要ですrm

$ rm -fr foo/{*,.*}

はい

$ ls -l foo
drwxrwxr-x    6 saml saml  4096 Sep 27 09:43 .
drwx------. 263 saml saml 32768 Sep 27 09:42 ..
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir1
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir2
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir space1
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir space2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 .dot space1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 .dot space2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file space1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file space2

$ rm -fr foo/{*,.*}
rm: cannot remove directory: `adir/.'
rm: cannot remove directory: `adir/..'
$

$ ls -l foo/
total 0
$

新しいファイルディレクトリを繰り返します。

$ find foo/* -delete
$

特殊文字処理

空白という名前のディレクトリがある場合はfoo tastic引用できますが、まだワイルドカードを使用できます。

はい

$ rm -fr "foo tastic"/*

特殊文字

私はこのトリックをよく使用して、ファイル名の混合を実行する前にシェルがファイル名の混合をどのように考えているかを確認します。上記で使用したディレクトリの例:

$ls -1 "file"* ファイルスペース 1 ファイルスペース 2

$ls -1d "dir" * ディレクトリスペース 1 ディレクトリスペース 2

これらのテストを事前に実行すると、globを含むコマンドを使用するときにどのファイル/ディレクトリが使用されているかを確認できます。

関連情報