Exclua links simbólicos para outros sistemas de arquivos com find -mount

2

Estou trabalhando em um script que, entre outras coisas, extrai uma lista de todos os itens em um diretório (arquivos e subdiretórios) para arquivamento, mas ele precisa pular links simbólicos remotos (por exemplo, em outros sistemas de arquivos). O script foi migrado do Solaris, onde find . -mount parece ter excluído links simbólicos para outros sistemas de arquivos.

A página de manual do encontro para -mount diz

-mount Don't  descend directories on other filesystems.  An alternate name for -xdev, for compatibility with some other versions of find.

Eu tentei -xdev , mas isso também não funcionou.

Como resultado da diferença, meus links simbólicos remotos são excluídos.

Alguma ideia de como posso consertar isso como uma linha direta para eliminar retornos simbólicos remotos?

    
por amphibient 05.02.2013 / 22:18

1 resposta

1

O comportamento do Solaris é buggy. -mount aka -xdev não significa que os links simbólicos que apontam para fora do sistema de arquivos inicial devem ser excluídos: esse comportamento nem é descrito na Documentação do Solaris e outras implementações não fazem isso. O que -xdev significa é que quando find chega a um ponto de montagem em sua passagem de diretório recursiva, ele pula completamente o ponto de montagem.

Não acho que haja uma maneira fácil de filtrar find correspondências pelo dispositivo que contém o destino de um link simbólico. Aqui está um método que se baseia no utilitário stat no Linux (não funciona no Solaris). / p>

find /some/path -xdev \( ! -type l -o -exec sh -c '[ "$0" = "$(stat -L -fc %t "$1")" ]' "$(stat -fc %t /some/path)" {} \; \) -print

Ou seja. imprima tudo que não seja um link simbólico e, para links simbólicos, imprima apenas se o número do sistema de arquivos do destino corresponder ao número do sistema de arquivos do ponto inicial. Os links simbólicos pendentes são excluídos e acionam uma mensagem de erro; adicione -o -xtype l após ! -type l para incluí-los e adicione -xtype l -o após -xdev para excluí-los silenciosamente.

    
por 06.02.2013 / 01:43

Tags