私のディレクトリには次のコンテンツがあります。
1/
2/
3/
4/
5/
active -> 1
previous -> 2
これは、フォルダとそのフォルダを指す2つのシンボリックリンクです。シンボリックリンクを削除するのではなく、シンボリックリンクに指定されていないフォルダをすべて削除したいと思います。私は次を試しました
find . -maxdepth 1 -mindepth 1 -type d -not -path "$(readlink -f active)" -not -path "$(readlink -f previous)"
除外したい2つのディレクトリがまだ返されます。どうなりますか?
ベストアンサー1
いくつかの質問があります:
readlink -f
絶対パスを返し、接頭-path
辞付きの相対パスが必要です./
。- 一部のバージョンは、
readlink
拒否されたシンボリックリンクへの末尾のスラッシュを含むパスを返しますfind
(Ubuntuではテストされていますが、Gentooでは再現できません)。
これはUbuntuで私にとって効果的でしたが、おそらく最もエレガントな解決策ではありません。
find . -maxdepth 1 -mindepth 1 -type d -not -path "./$(readlink active | sed "s/\/$//")" -not -path "./$(readlink previous | sed "s/\/$//")"
realpath
以下は、Gentooによってテストされた少し簡単な選択肢です。
find . -maxdepth 1 -mindepth 1 -type d -not -path "./$(realpath --relative-to=. active)" -not -path "./$(realpath --relative-to=. previous)"