Encontrar com '-tipo d' não funciona se o caminho contiver links simbólicos?

0

Eu tenho uma estrutura de diretórios algo assim (simplifiquei para essa pergunta):

/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

Eu quero executar um comando em todos os diretórios dentro da hierarquia diry / idx. O comando básico usual seria find /dirY/idx -type d -exec CMD {} \;

Para minha surpresa, ele falha após depth = 1. Tenho quase certeza de que deve ser porque find está parando nos links simbólicos - mas como evito esse comportamento e sigo todos os links?

Se eu remover o -type d primary, ele descerá nos diretórios vinculados corretamente, mas não se limitará aos diretórios na pesquisa. Se eu limitar os arquivos encontrados aos diretórios, ele será interrompido no nível do symlink. Normalmente, ele procurará em toda a hierarquia por arquivos correspondentes às primárias, mas, neste caso, não é.

Eu tentei as opções de comportamento de links simbólicos -H -L -P (mesmo que -P seja um valor padrão) - Estou no FreeBSD - mas sem sorte.

Eu não posso usar o aninhamento de procura, ou encontrar o link OU dir, porque o problema pode surgir arbitrariamente em outros lugares da árvore também. Tenho certeza de que o symlink que manipula args está lá para resolver esse tipo de coisa, talvez eu esteja entendendo mal o que eles fazem.

Como corrijo meu comando find?

    
por Stilez 30.04.2018 / 04:42

0 respostas