!["rm -rf *"コマンドがディレクトリ内のすべてのファイルを削除しないのはなぜですか? [繰り返し]](https://linux33.com/image/8963/%22rm%20-rf%20*%22%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%8C%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%86%85%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%81%AA%E3%81%84%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%5D.png)
ほとんどのファイルは消えていますが、まだ2つのファイルしか残っていません。
「.RData」と「.Rhistory」
なぜですか?私はRを使用していますが、これらのファイルが何であるかわかりません。
後でsudoを使用せずに個別に削除できます。
答え1
*
可視ファイルのみが含まれます。これらの項目と非表示の項目を削除するには、次のようにします。
rm -rf * .*
グループオーダーオプション
Bashを使用すると、この動作を変更してファイルを非表示にすることができます。これを説明するために、1つは隠されていて、もう1つは隠されている2つのファイルを作成しましょう。
$ touch unhidden .hide1
$ ls *
unhidden
ご覧のとおり、非表示のアイテムのみが表示されますls *
。それでは、dotglob
オプションを設定してみましょう。
$ shopt -s dotglob
$ ls *
.hide1 unhidden
これで両方のファイルが表示されます。もちろん、必要に応じてdotglobをオフにすることもできます。
$ shopt -u dotglob
$ ls *
unhidden
文書
からman bash
:
パス名拡張にパターンを使用する場合、シェルオプション dotglob が設定されていない限り、名前の先頭またはスラッシュの直後の「.」文字は明示的に一致する必要があります。パス名を一致させるときは、スラッシュ文字は常に明示的に一致する必要があります。それ以外の場合は、「。」文字は特に処理されません。 nocaseglob、nullglob、fallglob、およびdotglobシェルオプションの説明については、以下のSHELL BUILTIN COMMANDSの下のshoptの説明を参照してください。
つまり、パス名拡張.
名前で始まるファイルは、明示的に指定しない限り無視されます.
。
セキュリティの質問
予期しない状況を避けるために、現在のディレクトリと親ディレクトリの削除はコマンドラインで指定してもrm
拒否されます。.
..
$ rm -rf .*
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘..’
答え2
次に、ディレクトリが正しいことを確認します。
sudo rm -rf * .*