名前にそのバージョンを含むファイルへのシンボリックリンクがあるとします。 (ファイルは実際にはjarファイルです。)これで、バージョンが変更されたことを示すメッセージが表示されます。つまり、リンクした古いファイルが削除され、名前が異なるバージョンで新しいファイルが作成されました。新しく作成されたjarファイルを指す新しい名前で新しいリンクを作成し、bashスクリプトから古いリンクを削除する方法。
これまで私がしたことは次のとおりです。
cd $THE_FOLDER_OF_BROKEN_LINKS
find . -type l -exec test ! -e {} \; -print0 | xargs -0 -i readlink "{}" | sed -r "s#(.*/).*\.jar#\1#g"
壊れたリンクごとに、新しいjarファイルを含むフォルダが提供されます。次に試したのは、次のような新しいjarファイルを見つけることでした。
cd $THE_FOLDER_OF_BROKEN_LINKS
find . -type l -exec test ! -e {} \; -print0 | xargs -0 -i find `readlink "{}" | sed -r "s#(.*/).*\.jar#\1#g"` -name "prefix*.jar"
これは私に新しいボトルを持って来なければなりません。ただし、再帰的に動作するため使用できません。再帰フォルダにこのパターンに一致する他の項目があるかどうかはわかりません。ただ、現在のフォルダの正規表現に一致するjarが1つだけあることとprefix*.jar
それに対して接続する必要があることだけを知っています。
ln
その後、実際にリンクを作成する必要があります。ファイル名は同じままである可能性があるため(つまり、2番目の引数は必要ありません)、探しているこのファイルを見つける方法によってはそれほど難しくないと思います。しかし、最初のfindコマンドを再呼び出しせずに壊れたリンクを削除する方法がわかりません。
この質問は私がLinuxに初めて遭遇したのでしばらく続きましたが、このようなマイナーな問題にあまりにも多くの時間を費やすべきではないので、ついに助けを求めました。
答え1
awkでgsubを使用してファイル名から削除し、バージョン番号なしでリンクを作成し、リンクをアップグレードされたjarファイルに置き換えることで同じ問題を解決しました。
特定のバージョン番号スキームを使用しているので、ここに投稿することは役に立ちませんが、必ず必要な場合はリクエストしていただければ追加します。
非常に基本的な例:
find ./ -name \*[0-9]\*.jar | awk '{dest=$0;gsub(/[0-9]*/,"");\
print "ln -sf "dest" "$0}'