bash :: distinguir visualmente links físicos em ls

bash :: distinguir visualmente links físicos em ls

estou usandofestashell no Ubuntu preciso.

sou parcial emlinks simbólicosemfestamesmo quando umlink físicofariam mais sentido porque podem ser mais facilmente identificados com umeu. Em contrapartida, paralinks físicosEu tenho que comparar visualmente oinodenúmeros. Isto é mais complicado em comparação com a saída deeuem um link virtual que mostra o alvo com "-->" e pode ter um esquema de cores diferente aplicado. Existe uma maneira de tereudiferenciar visualmente links físicos de "arquivos normais"? Por exemplo, talvez colorindo de maneira diferente arquivos com uma contagem de referência superior a 1?

Entendo que a questão não está formulada corretamente, pois conceitualmente um link físico é apenas outro nome para o inode e, portanto, indistinguível de um "arquivo normal" e que não existe o conceito de alvo como nos links simbólicos, mas você entende meu caso de uso.

Responder1

ls -la saída mostra o número de links físicos para uma entrada do sistema de arquivos entre permissões e proprietário:

$ mkdir foo
$ ls -ld foo
drwxr-xr-x  2 danielbeck  staff  68 15 Aug 18:49 foo

É 2por padrão para diretórios vazios foo/.e foo. Cada subdiretório adiciona um para seu arquivo ... A menos que você esteja no OS X e tenha sanidade questionável, esse é o único link físico de diretório que você obterá.

Os arquivos, é claro, mostram apenas links físicos "reais", então qualquer coisa 1indica que há um link físico em algum lugar:

$ touch bar
$ ln bar baz
$ ls -l bar baz
-rw-r--r--  2 danielbeck  staff  0 15 Aug 18:52 bar
-rw-r--r--  2 danielbeck  staff  0 15 Aug 18:52 baz

My (BSD/OS X) lsnão tem opções relacionadas a links físicos, mas você pode escrever sua própria função shell, como a seguir, que imprime apenas a contagem de links físicos e caso contrário é ls -F1(se ls -lfor muito complicado):

function lss {
    OLDIFS="$IFS"
    IFS=$'\n'
    for line in $( ls -d1 $@ )
        do stat -f '%N%T (%l)' "$line"
    done
    IFS="$OLDIFS"
}

Saída para os dois hardlinks e um arquivo não relacionado qux:

$ lss bar baz qux
bar (2)
baz (2)
qux (1)

informação relacionada