次のディレクトリ構造があります(この質問を簡素化しました)。
/dirX
/dirX/d/d1 [and contained files+subdirs]
/dirX/d/d1/d2 [and contained files+subdirs]
/dirX/d/d1/d3 [and contained files+subdirs]
/dirX/d/d4 [and contained files+subdirs]
/dirX/d/d4/d5 [and contained files+subdirs]
/dirX/d/d4/d6 [and contained files+subdirs]
/dirX/d/d7 [and contained files+subdirs]
/dirY
/dirY/idx
/dirY/idx/d2 -> symlink to /dirX/d/d1/d2
/dirY/idx/d5 -> symlink to /dirX/d/d4/d5
/dirY/idx/d7 -> symlink to /dirX/d/d7
dirY / idx階層のすべてのディレクトリに対してコマンドを実行したいと思います。通常、デフォルトのコマンドは次のとおりです。find /dirY/idx -type d -exec CMD {} \;
驚くべきことに、深さ= 1以降は失敗します。私はこれがシンボリックリンクで止まるからだと確信していますfind
。しかし、どのようにこの動作を防ぎ、すべてのリンクを追跡できますか?
ホームディレクトリを削除すると、-type d
シンボリックリンクディレクトリに正しく移動しますが、検索時にそのディレクトリに制限されません。見つかったファイルをディレクトリに制限すると、シンボリックリンクレベルで停止します。通常、階層全体で基本項目と一致するファイルを検索しますが、この場合はそうではありません。
私はシンボリックリンクアクションオプション-H -L -Pを試しました。 (-P はデフォルト値ですが) - FreeBSD を使用していますが、運はありません。
問題はツリー内の他の場所でもランダムに発生する可能性があるため、入れ子になった検索を使用したり、リンクやディレクトリを見つけることはできません。私はこのような問題を解決するためにシンボリックリンク処理パラメータがあると確信しています。たぶん彼らがすることを誤解しているかもしれません。
私のfindコマンドをどのように修正しますか?