Linuxで検索コマンドを使用してパスごとに特定のフォルダを除外する方法は?

Linuxで検索コマンドを使用してパスごとに特定のフォルダを除外する方法は?

私のディレクトリには次のコンテンツがあります。

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

いくつかの質問があります:

  1. readlink -f絶対パスを返し、接頭-path辞付きの相対パスが必要です./
  2. 一部のバージョンは、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)"

おすすめ記事