cpのターゲットパスがディレクトリの場合、そのディレクトリにファイルが誤って生成されるのを防ぐにはどうすればよいですか?

cpのターゲットパスがディレクトリの場合、そのディレクトリにファイルが誤って生成されるのを防ぐにはどうすればよいですか?

私の理解はcp src dest次のとおりです

  1. srcファイルであり、存在しないがdest親ディレクトリが存在する場合はdest作成します。
  2. srcファイルでファイルの場合は、そのdest内容destで上書きされますsrc
  3. srcファイルとdestディレクトリの場合はdest/src作成します。

私は状況#3を避けようとしています。仮定してスクリプトを書くとdest に慣れるディレクトリですが、実行時に見つかりました。はい、cpファイルを変なところに入れたくないし、静かに続けたい。

代わりに、私は以下が欲しい:

  • ディレクトリ全体destを削除し、必要なファイルに置き換えます。
  • 何もしないでエラーが発生します。

私もこれが原子的に起こりたいです。 TOCTTOUの問題は、別のコマンド(ディレクトリがあるかどうかを確認するなどtest -d)を使用して発生する可能性があります。dest

これは可能ですかcp?それ以外の場合は、他の同様の汎用コマンドを使用して実行できますか?

私はポータブルソリューションと非標準拡張に依存するソリューション(合理的に一般的な場合)の両方に興味があります。

ベストアンサー1

リダイレクトがまさにその役割を果たします。これは'sと同じように機能しますcp-T, --no-target-directoryディレクトリの場合はエラーで終了します)。dst

$ cat src > dst

おすすめ記事