ファイルが存在しない場合、rm オプションは失敗します。

ファイルが存在しない場合、rm オプションは失敗します。

GNU coreutils 8.12.197-032bb ページでは、manまたはオプションを「存在しないファイルを無視してメッセージを表示しない」と説明します。このオプションがない場合、既存のファイルはすべて削除され、メッセージは表示されず、指定されたファイルがない場合はゼロ以外の終了コードが返されます。私の考えではrm-f--force次の場合はファイルをアーカイブしてください。どの指定したファイルが存在しません。これを行う最も簡単な方法は何ですか?

ユースケースは安全:存在しないファイルを削除しようとすると、コマンドに誤った期待(または単純エラー)があるためです。例えば有名なrm -rf /usr /lib/nvidia-current/xorg/xorgこれはいくつかの方法で回避できます。そのうちの1つはこのようなオプションであり(明らかにユーザーが驚くべき偶然の一致でディレクトリを持っていない限り/lib/nvidia-current/xorg/xorg)、もう1つは次のようになります。より多くの引用を使用™。しかし、引用だけでは十分ではありません。たとえば、次の点を考慮してくださいssh host '/bin/rm some paths; /bin/bash foo.sh'。セミコロンを忘れたり、他のほぼすべての記号(コロンやコンマなど)を挿入したり、/bin/bash削除されます~/foo.sh

ベストアンサー1

私は次のようなものを使用します:

mkdir DELETE && mv "some" "paths" DELETE && rm -rf DELETE

シングルパスの場合:

mv /some/path DELETE && rm -rf DELETE

rm commandより良い方法は、別のコマンドラインに次のように入力することですmv /some/path DELETE Enter rm -rf DELETE Enter。これにより、rmシェル履歴に書き込まれる唯一のコマンドはという名前のファイルであるため、以前のバージョンのファイルを削除した場合は、誤って誤った回数をクリックして新しいバージョンを削除することはDELETEありません。UpEnter

少し自動化したい場合:

mv_to_DELETE () {
  mkdir DELETE &&
  mv -- "$@" DELETE/
}
mv_to_DELETE "some" "paths"
rm -rf DELETE

おすすめ記事