ターゲットに「Dropbox」が含まれている現在のフォルダの下にあるすべてのシンボリックリンクを見つけようとしています。
私の推測は次のとおりです。
find . -type l -iname '*Dropbox*'
しかし、これは何も返しません。
次のようなアイテムを探したいです。
com.adobe.illustrator.plist -> /Volumes/data/Dropbox (Personal)/Mackup/Library/Preferences/com.adobe.illustrator.plist
com.apple.Terminal.plist -> /Volumes/data/Dropbox (Personal)/Mackup/Library/Preferences/com.apple.Terminal.plist
com.noodlesoft.Hazel.plist -> /Volumes/data/Dropbox (Personal)/Mackup/Library/Preferences/com.noodlesoft.Hazel.plist
これにより、テキストなしでリンクを再作成できます(Personal)
。 (これを一行で達成できる方法があれば本当にいいと思います!)
答え1
または(一部のBSDは、find
以下を含むGNU拡張もサポートしています。-lname
)-ilname
アップルシステムあなた/Volumes
は))を使用することができると提案しました。
find . -lname '*Dropbox*' -exec ls -ld {} +
または大文字と小文字を区別しません。
find . -ilname '*dropbox*' -exec ls -ld {} +
そうでない場合(またはこれらのリンクを使用して簡単にタスクを実行したり、ソートされたリストを好む場合)、すでにそのzsh
リンクがあり(macOSでデフォルトで有効になっている)、次のことができます。
zmodload zsh/stat
set -o extendedglob # for (#i) for case insensitive
link_match() {
local target
zstat -A target +link -- "${2-$REPLY}" &&
[[ $target = $~1 ]]
}
ls -ld -- **/*(D@e:'link_match "(#i)*dropbox*"':)
またはリンクを再作成してください。
zmodload zsh/stat
for l (**/*(D@))
zstat -A target +link -- $l &&
[[ $target = *"Dropbox (Personal)"* ]] &&
rm -f -- $l &&
ln -s -- ${target//" (Personal)"} $l
必要に応じて、すべてのシェルコードを1行に書くことができますが、これはわかりません。ここで1行に入れたい場合は、行を1つにまとめてください。
GNUまたはFreeBSD / macOSユーティリティを使用して同様の操作を実行することは、よりbash
複雑で効率が低くなります。
LC_ALL=C find . -lname '*Dropbox (Personal)*' -exec bash -c '
for l do
target=$(readlink "$l" && echo .) || continue
target=${target%??}
rm -f "$l" &&
ln -s -- "${target//" (Personal)"}" "$l"
done' bash {} +