GNU coreutils man page for rm
を読むと、オプションの1つは-f
、マニュアルによると、
-f, --force
ignore nonexistent files and arguments, never Prompt
今、私はいくつかのテストを行い、実際に私が何かのようなものを使用する場合
rm -f /nonexisting/directory/
それは文句を言わないでしょう。
誰かがそのようなオプションから本当に何を得ることができますか?
さらに、rm
を使用した「ディレクトリの削除」の最も一般的な例は、次のようなものです。
rm -rf /delete/this/dir
-r
オプションは意味がありますが、-f
?
この場合、manページには少し詳細が欠けていることがわかります。 rm
の-f
オプションには、実際にはいくつかの使用例があります。
存在しないファイルを削除しても意味がないのは当然ですが、スクリプトでは、「これらのファイルは必要ありません。見つかった場合は削除しますが、必要ない場合は私に迷惑をかけないでください」と言えると便利です。 「存在しない」。一部の人々はスクリプトでset -e
を使用してエラーが発生すると停止し(スクリプトが引き起こす可能性のあるさらなる損傷を回避するため)、rm -rf /home/my/garbage
はif [[ -f /home/my/garbage ]]; then rm -r /home/my/garbage; fi
よりも簡単です。
権限チェックに関する注意:ファイルを削除するには、ファイル自体ではなくparentディレクトリへの書き込み権限が必要です。たとえば、ホームディレクトリにroot
が所有するファイルがあり、Sudo
アクセス権がない場合でも、-f
オプションを使用してファイルを削除できます。 Gitを使用する場合、Gitが作成するオブジェクトファイルへの書き込み権限を残していないことがわかります。
-r--r--r-- 1 phunehehe phunehehe 62 Aug 31 15:08 testdir/.git/objects/7e/70e8a2a874283163c63d61900b8ba173e5a83c
したがって、rm
を使用する場合、root
を使用せずにGitリポジトリを削除する唯一の方法は、rm -rf
を使用することです。
-f
オプションは、読み取り専用ファイルを削除するときに確認プロンプトを抑制します。また、提供された1つ以上のファイルが存在しない場合のエラーも抑制します。
-f
オプションは、削除するファイルの一部が読み取り専用である可能性があり、そのことについてプロンプトが表示されたくない場合に役立ちます。
f
オプションは、ファイルが存在する場合にそれらを削除し、それらが存在するかどうかを気にしたくない場合にも役立ちます。これは makefiles で非常によく使用され、ソースファイルから再生成できるファイルを削除するコマンドを作成します。たとえば、foo.o
をfoo.c
から再構築できる場合、bar.o
はbar.c
から再構築でき、myapp
はfoo.o
から再構築できますおよびbar.o
、次にメイクファイルターゲット
clean:
rm -f *.o myapp
myapp
、foo.o
およびbar.o
が存在する場合は削除し、存在しない場合でも問題を報告しません。
ほとんどの場合、ディレクトリツリーを削除する手順に-f
を含める必要はありません。内容に関係なくそのディレクトリツリーを削除したい場合は、-f
を指定して、一部のファイルが読み取り専用の場合にプロンプトが表示されないようにすることができるため、正当化できます。ただし、rm -rf
を実行すると言う人は、オプション-r
と-f
が実際に必要かどうかに関係なく、何かを取り除くために神秘的な呪文を繰り返すことがよくあります。これらのオプションは、必要でない場合はお勧めできません。引数のタイプミスが重要なものを破壊するリスクが高まるためです。
-i
スイッチからrm
インタラクティブに-f
スイッチが含まれるようにrm
コマンドがエイリアスされている場合、-i
がrm
と共に使用されるのが一般的です。 -f
スイッチは-i
に対抗します。
rm
をrm -i
のエイリアスとして問題をシミュレートします。
$ alias rm='rm -i'
偽のデータを作成します
$ touch afile
次に、rm
のエイリアスバージョンを使用して削除してみます
$ rm afile
rm: remove regular empty file `afile'?
それでは-f
を使用してみてください
$ rm -f afile
$
また、ディレクトリへの読み取り専用アクセス権があり、そのディレクトリ内のファイルやサブディレクトリを削除しようとすると、同様の「確認してよろしいですか?」というプロンプトが表示される場合もあります。 -f
を使用すると、「はい」と言う必要がなくなります。