マニュアルより:
-f、--force は、
存在しないファイルを無視し、プロンプトを表示しない
-r、-R、--再帰
ディレクトリの内容を再帰的に削除する
このオプションの説明は異なりますが、空のフォルダーを削除しようとすると (この例では rmdir なし)、同じ結果になります。
-f
と比較して、エラーなどは印刷されません。-r
これが唯一の違いですか、それとも、一方のオプションが他方のオプションよりも優れている特定の状況、またはこのオプションの 1 つが単に機能せず、もう一方のオプションが機能する状況があるのでしょうか。
答え1
CentOS のマニュアルページには次のように書かれています:
-f, --force
ignore nonexistent files, never prompt
-r, -R, --recursive
remove directories and their contents recursively
私が収集した情報 (以下のコメントによる) によると、-r
および-f
フラグについては次のことが当てはまります。
-r
- 隠しファイルやサブディレクトリを含むディレクトリの内容を再帰的に削除します。
- 設定によっては、許可を求められる場合があります (たとえば、フラグを使用する場合
--interactive
)。一部のディストリビューションでは、これがデフォルトで行われます。 - ディレクトリを削除するために使用できます。削除する場合は、ディレクトリのパスを指定するだけです (例:
/path/to/directory
)
-f
- ディレクトリの内容を再帰的に削除するのではなく、指定されたパスに直接一致するファイルのみを削除します (たとえば、
example/file1
またはexample/*
)。 - サブディレクトリを削除しない
yes to all
基本的にWindowsでは許可を求めません
以下にいくつかの例を示します。いずれも次の構造で始まります。
example/
file1
file2
file3
.file
dir/
file1
file2
file3
.file
これらの例では、詳細モードと対話モードをデフォルトで有効にしました。ディストリビューションによってはこれを実行するものもあれば、実行しないものもあります。
rmの例
$ rm example
rm: cannot remove `example': Is a directory
ご覧のとおり、rm
デフォルトではディレクトリは削除されません。
rm 例 -f
$ rm example -f
rm: cannot remove `example': Is a directory
フラグを使用して-f
も、ディレクトリを削除することはできません。
rm 例 -r
$ rm example -r
rm: descend into directory `example'? yes
rm: remove regular empty file `example/file3'? yes
removed `example/file3'
rm: remove regular empty file `example/file2'? yes
removed `example/file2'
rm: descend into directory `example/dir'? yes
rm: remove regular empty file `example/dir/.file'? yes
removed `example/dir/.file'
rm: remove regular empty file `example/dir/file3'? yes
removed `example/dir/file3'
rm: remove regular empty file `example/dir/file2'? yes
removed `example/dir/file2'
rm: remove regular empty file `example/dir/file1'? yes
removed `example/dir/file1'
rm: remove directory `example/dir'? yes
removed directory: `example/dir'
rm: remove regular empty file `example/file1'? yes
removed `example/file1'
rm: remove directory `example'? yes
removed directory: `example'
ご覧のとおり、すべてのファイルとディレクトリに対して許可が求められ、隠しファイルも削除されます。
rm 例/* -f
$ rm example/* -f
rm: cannot remove `example/dir': Is a directory
removed `example/file1'
removed `example/file2'
removed `example/file3'
ここでは、許可は求められず、ディレクトリは削除されず、隠しファイルも削除されません。
rm 例/* -r
$ rm example/* -r
rm: descend into directory `example/dir'? yes
rm: remove regular empty file `example/dir/.file'? yes
removed `example/dir/.file'
rm: remove regular empty file `example/dir/file3'? yes
removed `example/dir/file3'
rm: remove regular empty file `example/dir/file2'? yes
removed `example/dir/file2'
rm: remove regular empty file `example/dir/file1'? yes
removed `example/dir/file1'
rm: remove directory `example/dir'? yes
removed directory: `example/dir'
rm: remove regular empty file `example/.file'? yes
removed `example/file'
rm: remove regular empty file `example/file1'? yes
removed `example/file1'
rm: remove regular empty file `example/file2'? yes
removed `example/file2'
rm: remove regular empty file `example/file3'? yes
removed `example/file3'
ここでは、隠しファイルを含む、サンプル ディレクトリの内容 (ディレクトリ自体ではありません) が削除されます。
答え2
rm -r mydir
ディレクトリとそのすべての内容を削除しますmydir
。
rm -f mydir
ディレクトリ(空でも中身がなくても)は削除されません。エラーが報告されます:
BSD/OS Xの場合:
rm: mydir/: is a directory
GNU/Linuxの場合:
rm: cannot remove 'mydir': Is a directory
指定された引数に関係なくコマンドが動作する理由として考えられるものrm
(最も可能性の高いものから最も可能性の低いものまで):
- シェルエイリアスが
rm
定義されており、いくつかの定義済みパラメータ(など-r
)がrm
コマンドに渡されます - というスクリプトを呼び出していますが
rm
、このスクリプトは実際のコマンドに追加のパラメータも渡します。 rm
カスタム実行ファイルがある
最初の 2 つの可能性は、 を実行することで確認できます/bin/rm -f mydir
。