Obtém uma lista de diretórios na hierarquia, que contém apenas links simbólicos

0

Estou ciente de várias ferramentas disponíveis para obter uma lista de diretórios em hierarquia, que contêm apenas links simbólicos, mas eu não sou proficiente o suficiente para inventar uma solução sozinho.

Pessoalmente, terei que usar o tcsh para fazer isso.

Outro problema que tenho é como fazer o mesmo, mas apenas listar diretórios contendo pelo menos um link simbólico e pelo menos um outro arquivo.

    
por Szymon 21.09.2017 / 17:23

2 respostas

1

os diretórios com apenas links simbólicos serão deixados na árvore de diretórios, como se não contivessem diretórios e, portanto, não sejam links simbólicos.

No Solaris, pelo menos para sistemas de arquivos UFS e ZFS, você deve procurar diretórios com menos de 3 links para isso.

find . -type d -links -3 -exec sh -c 'ls -Anq "$0" | awk "NR==1{next};/^[^l]/{exit 1};END{if (NR<2) {exit 1}}"' {} \; -print

Para diretórios com pelo menos um link simbólico e um não simbólico, você precisa verificar cada dir:

find . -type d -exec sh -c 'ls -Anq "$0" | awk "NR==1{next};/^[^l]/{nonlink++};/^l/{link++}; END{exit !(link&&nonlink)}"' {} \; -print
    
por 21.09.2017 / 18:13
1

Uma maneira de fazer isso, com sh e GNU find , e assumindo que nomes de arquivos não tenham novas linhas incorporadas:

#! /bin/sh
find /path/to/dir -type d -links 2 | \
    while read -r d; do
        found=0
        for f in "$d"/*; do
            if [ ! -h "$f" ]; then continue 2; fi
            found=1
        done
        if [ x$found = x1 ]; then printf '%s\n' "$d"; fi
    done

Problemas com essa abordagem:

  • não tcsh
  • pode ser enganado por arquivos que começam com um ponto.

Editar: com python :

#!/usr/bin/env python

import os
import sys

for topdir in sys.argv:
    for root, dirs, files in os.walk(topdir):
        if not dirs and files:
            if all(os.path.islink(os.path.join(root, f)) for f in files):
                print os.path.join(root)

Problema com esta abordagem: python pode não estar instalado.

    
por 21.09.2017 / 18:09