元のファイルより古いシンボリックリンクを更新するために既存のコマンドを使用する方法はありますか?
私は生徒に特定のファイルを提供するためにSeafileサーバー(Dropboxに似ています)を使用します。だからディレクトリを共有し、ファイルへのリンクを作成しました。 SeafileやDropboxはリンクを気にせず、代わりに物理ファイルをサーバーにコピーします。
問題は、実際のファイルを更新してもリンクタイムスタンプが変更されず、ファイルの新しいバージョンがサーバーにアップロードされないことです。
私は次の簡単なテストを試しました。
[ ./shared/the-symlink -ot ./actualfiles/pontedfile ] && touch -h ./shared/the-symlink
残念ながら、test
リンクを逆参照し、ファイルのタイムスタンプをそれ自体と比較することはもちろん間違っていることがわかります。
さらに、シンボリックリンクはリンクされたファイルよりも最新のバージョンでなければなりません。同じタイムスタンプに設定する必要はありません。
test
リンクが指すファイルの代わりにリンクのタイムスタンプを確認する方法はありますか?
私が避けたい他の解決策は次のとおりです。
- リンクの代わりにファイルをコピーすると機能しますが、通常はファイルがかなり大きいため、あまりにも多くのディスク容量を消費する必要があります。
touch
すべてのシンボリックリンクも機能しますが、すべてのファイルはサーバーにコピーされ続けます。 ;(大丈夫です。:以下の編集を参照)
タイムスタンプを文字列に変換して直接比較するよりもエレガントなソリューションが必要です。
この頭私にとっては解決策ではありません。
編集する:
これは質問に対する答えではありませんが、私の問題に対する解決策です。touch -h *
すべてのシンボリックリンクタイムスタンプを更新してください。 Seafileはこれらの変化を認識し、措置を講じました。幸いなことに、実際のファイルタイムスタンプを使用して変更されたファイルのみを再確認してアップロードします。
編集2:
作品を使ったソリューションstat
:stat -c "%Y"
ありがとう。スティーブ。
答え1
stat
シンボリックリンク自体のタイムスタンプを提供します。
したがって、次のようなことが可能です。
[[ $(stat -c '%Y' b) -lt $(stat -c '%Y' a) ]] && touch .......