4

私のbashスクリプトは、いくつかのファイルのコピーをいくつかの複数のディレクトリに作成します。

スペースを節約して速度を最大化するために、コピーではなくハードリンクを作成することをお勧めします。

ただし、スクリプトは別のコンピューターで実行され、宛先ディレクトリが元のボリュームとは異なるボリュームに存在する場合があります。このような場合、ハードリンクを作成できず、ファイルをコピーするだけで済みます。

元のディレクトリと宛先のディレクトリが同じボリュームに存在するかどうかを確認し、それに応じてハード リンクまたはコピーを行うにはどうすればよいですか?

4

2 に答える 2

4

これを行う簡単な方法は、両方を試すことです。

    ln "$FROM" "$TO" || cp "$FROM" "$TO"

目的によっては、参照コピー (ハードリンクされたファイルとほぼ同じくらい軽量ですが、2 つのコピーを後で編集/分岐できるようにする) を作成するとうまくいく場合があります。

    cp --reflink=auto "$FROM" "$TO"

ただし、次を使用してデバイス ファイルシステムのデバイス ID を取得できますstat

    if [ $(stat -c %D "$FROM") = $(stat -c %D "$TARGET_DIR") ]; then
          ln "$FROM" "$TARGET_DIR"/
    else
          cp "$FROM" "$TARGET_DIR"/
    fi
于 2012-01-11T16:09:25.110 に答える
1

成功lnした場所で失敗したかどうかを確認する簡単な方法:cp

ln $SRC $TARGET || cp $SRC $TARGET
于 2012-01-11T16:04:57.493 に答える