回答:
ファイルが存在するかどうかを確認する必要はありません。削除してみてください。
rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null
ファイルが存在しない場合、2番目のコマンドは失敗します(ゼロ以外の終了ステータスを返します)が、最初のコマンドは-f
(の省略形--force
)オプションにより成功することに注意してください。状況によっては、これは重要な詳細になる場合があります。
しかし、より可能性が高いのは、ファイルに追加する場合は、スクリプトが>>
何かをファイルにリダイレクトするために使用しているためです。で置き換え>>
てください>
。コードを提供していないので、言うのは難しいです。
のようなことができますtest -f /p/a/t/h && rm /p/a/t/h
が、そうすることは完全に無意味です。テストがtrueを返しても、削除しようとする前に/ p / a / t / hが存在しなかったり、さらに悪いことに、テストが失敗して/ p / a / t / hが作成されたりする可能性があります。あなたがそれが存在しないことを期待する次のコマンドを実行する前に。これを試みることは古典的な競合状態です。しないでください。
rm /p/a/t/h 2> /dev/null
echo $?
ファイルが存在しない場合、戻りコード()を0として保持しません。存在しないファイルを削除しようとしたからといって、Jenkinsの種類のジョブは失敗します。
noclobber
bashなど)を試すか、ファイルが存在する場合に競合が発生しないように既存のファイルをchmodして(競合状態を回避しないで)、しかし、それでできることは、バグをより微妙にすることです。
私が使用した別の1行コマンドは次のとおりです。
[ -e file ] && rm file
あなたはこれを使うことができます:
#!/bin/bash
file="file_you_want_to_delete"
if [ -f $file ] ; then
rm $file
fi
echo $?
、ファイルが存在しない場合でも1にならないようにします。
ファイルが存在するかどうかを確認する手順を無視する場合は、かなり簡単なコマンドを使用できます。このコマンドは、ファイルが存在する場合は削除し、存在しない場合はエラーをスローしません。
rm -f xyz.csv
-f
それがエラーをスローしないことを説明していませんでした。この答えは私に役立ちました、ありがとう。
このようなものはうまくいくでしょう
#!/bin/sh
if [ -fe FILE ]
then
rm FILE
fi
-fはそれが通常のファイルかどうかをチェックします
-eは、ファイルが存在するかどうかを確認します
ifの詳細情報
編集: -fと一緒に使用される-eは冗長です。-fを単独で使用する場合も機能します。
-a
廃止予定です-e
。代わりに使用してください。
-f
です。
-e
中には-fe
同様に、冗長で-f
も...私の知る限りでは、ファイルの存在をチェックする
if [ $( ls <file> ) ]; then rm <file>; fi
また、出力を>
代わりにリダイレクトすると>>
、以前のファイルが上書きされます
file
は次のようなものであれば壊れます5 -lt 2
rm $my_file
ますか?どのシェルを使用していますか?