ファイルを上書きすると、シェルを呼び出すことなくターゲット権限が維持されます。

ファイルを上書きすると、シェルを呼び出すことなくターゲット権限が維持されます。

このような状況があります。

$ ls -la
-rw-r--r-- 1 user user 123 Mar  5 19:32 file-a
-rwx---rwx 1 user user 987 Mar  5 19:32 file-b

file-boverrideを使用したいのですが、file-aすべての権限と所有権を維持したいと思いますfile-b

権限を使用しているため動作しません。file-a

cp file-a file-b # << edit: this works as expected! My fault!
mv file-a file-b

これは機能しますが、シェルからのみ呼び出すことができます。関数やそのようなものだけを呼び出すことができる状況を想像してくださいexecve

cat file-a > file-b

私も知っています、私も次のことができます。

sh -c "cat file-a > file-b"

しかし、これはファイル名をエスケープするのが難しいので、使用したくありません。

これを行うためのいくつかの一般的なコマンドはありますか?それとも、これを行うために独自のヘルパーCプログラムを作成する必要がありますか?

ベストアンサー1

パターンをコピーせずにファイルをコピーする簡単なコマンドは次のとおりです。

dd if=file-a of=file-b

ddただし、stderrに詳細なステータスメッセージが記録されます。シェルでコマンドを実行して追加することでこれを抑制できますが、2> /dev/nullそれからステップ1に戻ります。 GNUがあればddこれを行うことができます

dd if=file-a of=file-b status=none

おすすめ記事