![ディレクトリの内容を削除する適切な方法](https://rvso.com/image/50569/%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E9%81%A9%E5%88%87%E3%81%AA%E6%96%B9%E6%B3%95%20.png)
削除する正しい方法は何ですか全てディレクトリの内容は、そのディレクトリなしで表示されますか?
たとえば、次のディレクトリ構造があります。
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 "ファイル "* ファイルスペース1 ファイルスペース2
$ ls -1d "dir "* dir スペース1 dir スペース2
事前にこれらのテストを実行することで、glob を含むコマンドが使用されるときにどのファイル/ディレクトリが使用されるかを把握できます。