私の理解はcp src dest
次のとおりです
src
ファイルであり、存在しないがdest
親ディレクトリが存在する場合はdest
作成します。src
ファイルでファイルの場合は、そのdest
内容dest
で上書きされますsrc
。src
ファイルとdest
ディレクトリの場合はdest/src
作成します。
私は状況#3を避けようとしています。仮定してスクリプトを書くとdest
に慣れるディレクトリですが、実行時に見つかりました。はい、cp
ファイルを変なところに入れたくないし、静かに続けたい。
代わりに、私は以下が欲しい:
- ディレクトリ全体
dest
を削除し、必要なファイルに置き換えます。 - 何もしないでエラーが発生します。
私もこれが原子的に起こりたいです。 TOCTTOUの問題は、別のコマンド(ディレクトリがあるかどうかを確認するなどtest -d
)を使用して発生する可能性があります。dest
これは可能ですかcp
?それ以外の場合は、他の同様の汎用コマンドを使用して実行できますか?
私はポータブルソリューションと非標準拡張に依存するソリューション(合理的に一般的な場合)の両方に興味があります。
ベストアンサー1
リダイレクトがまさにその役割を果たします。これは'sと同じように機能しますcp
(-T, --no-target-directory
ディレクトリの場合はエラーで終了します)。dst
$ cat src > dst