bashでファイルを作成、切り捨て、または上書きできるかどうかを確認する方法は?

bashでファイルを作成、切り捨て、または上書きできるかどうかを確認する方法は?

foo.sh file.txtユーザーは、スクリプト内の特定のポイントで作成または上書きされたファイルパスを使用して自分のスクリプトを呼び出しますfoo.sh dir/file.txt

生成または上書きの動作は、ファイルを出力リダイレクト演算子の右側に配置するか、引数>として渡す要件と非常によく似ていますtee(実際の引数として渡すことは、tee私が行うことです)。

スクリプトを開始する前に、ファイルを正しく確認したいと思います。できる実際に作成せずに生成/上書きされます。この検査は完璧である必要はありません。はい、スキャンと実際にファイルを作成する時点の間で状況が変わることがあることを知っています。しかし、ここでは大丈夫です。最大の努力ファイルパスが間違っている場合は、早期に終了できるようにソリューションを入力してください。

ファイルを生成できない理由の例:

  • ファイルにディレクトリコンポーネントが含まれていますが、dir/file.txtディレクトリはdir存在しません。
  • ユーザーに指定されたディレクトリ(またはディレクトリが指定されていない場合はCWD)に対する書き込み権限がありません。

はい、権限を「事前」として確認するのではないことを知っています。Unix Way™、むしろまず手術をしてみて許しを求めなければならなかったのに。しかし、私の特定のスクリプトでは、これはユーザーエクスペリエンスが悪く、担当コンポーネントを変更できませんでした。

ベストアンサー1

明らかなテストは次のとおりです。

if touch /path/to/file; then
    : it can be created
fi

しかし、まだファイルがない場合は、実際にファイルを生成します。私たちはそれを自分でまとめることができます:

if touch /path/to/file; then
    rm /path/to/file
fi

ただし、これにより不要な既存のファイルが削除されます。

しかし、我々はこの問題に対する解決策を持っています:

if mkdir /path/to/file; then
    rmdir /path/to/file
fi

ディレクトリは、ディレクトリ内の他のオブジェクトと同じ名前を持つことはできません。ディレクトリを作成できますが、ファイルを作成できない状況は想像できません。このテストが完了すると、スクリプトはルーチンを自由に生成し、/path/to/file必要な操作を実行できます。

おすすめ記事