`--link`を表現したり、cp(GNU coreutilsで)の通常のコピーで置き換える方法はありますか?

`--link`を表現したり、cp(GNU coreutilsで)の通常のコピーで置き換える方法はありますか?

知っている方法cp--linkハードリンクの作成など)がありますが、デバイス間でハードリンクを試みる場合に備えて置き換えることはできますか?デバイス間の接続ができず、cpエラーが発生します。

私が尋ねる理由は、これをGNUmakefileコマンドラインで使用したい、複雑で長いコマンドライン(または機能)ではなく読みやすいコマンドラインを好むからです。

問題はGNU coreutils(7.4および8.13)に関するものです。

注:現在のソリューションは(GNU make Recipe構文)に似ています。

cp -fl $^ $@ || cp -f $^ $@

もちろん、デバイス間リンクの場合、2回目のcp呼び出しが成功しても偽のエラーメッセージが表示されます。さらに、拡張すると(最終的にソースフォームは読みやすいように見えます)、読みやすくなりません。

ベストアンサー1

cpそのようなオプションはありません。ラッパースクリプトを書くこともできますが、これは非常に簡単です。

ln -f $^ $@ 2>/dev/null || cp -f $^ $@

--reflinkこのオプションはGNU Coreutils 7.5で導入されました。パスし--reflink=auto、プライマリファイルシステムが書き込み中のコピー(BtrfsやZFSなど)をサポートし、レプリカが同じデバイスにある場合、cp新しいinodeが作成されますが、内容はコピーされませんcp。コピーが実行されます。これはまだハードリンクではありませんが(ターゲットは常に別のインデックスノードです)、ユースケースに適している可能性があります。ただし、記録中にコピーをサポートしていないext4を使用している場合(最近ほとんどの人のように)、これは役に立ちません。

おすすめ記事