Como determinar se o destino de um link de software é um diretório ou um arquivo?

2

Dado o comando ll é produzido da seguinte forma

#> ll
lrwxrwxrwx ...

Como determinar se o alvo de um link é um diretório ou um arquivo de "lrwxrwxrwx"?

    
por xmllmx 23.01.2015 / 04:01

3 respostas

2

Você pode usar o parâmetro -F para ls para obter:

   -F, --classify
          append indicator (one of */=>@|) to entries

ou seja:

# ln -s videos Videos
# ls -l
lrwxrwxrwx. 1 guido guido    6 Jan 23 14:11 videos -> Videos
# ls -lF
lrwxrwxrwx. 1 guido guido    6 Jan 23 14:11 videos -> Videos/

De qualquer forma, sugiro que você crie links simbólicos para diretórios como este:

# ln -s Videos/ videos

neste caso, você obtém a barra final mesmo sem a opção de classificação.

    
por 23.01.2015 / 04:14
1

A saída de ll , que eu suponho ser um alias de shell para ls -l , não contém essa informação no modo / permissões do symlink. No Linux ( symlink (2) ):

   The  permissions  of  a  symbolic link are irrelevant; the ownership is
   ignored when following the link, but is checked when removal or  renam-
   ing  of  the  link is requested and the link is in a directory with the
   sticky bit (S_ISVTX) set.

Além de ls sugerido em outro lugar, há alguns métodos que são menos detalhados e se prestam a scripts.

file suporta -L , o que faz com que ele siga (desreference) links simbólicos:

$ file /usr/local/bin/xzcat
/usr/local/bin/xzcat: symbolic link to 'xz'

$ file -L /usr/local/bin/xzcat
/usr/local/bin/xzcat: ELF 32-bit LSB executable, [...]

$ file  /var/adm
/var/adm: symbolic link to 'log'

$ file -L /var/adm   
/var/adm: directory

A opção -L não é POSIX mas deve funcionar em qualquer Linux e * contemporâneo BSD. Ele seguirá vários links simbólicos (que ls não possui). Para um uso mais robusto, também suporta vários formatos de saída, e. file -L -b --mime-type /var/adm e -0 para nomes de arquivos delimitados por zero.

O GNU stat é ainda mais fácil:

$ stat -c %F /var/adm
symbolic link

$ stat -L -c %F /var/adm
directory

A opção -L funciona da mesma forma que para file , a opção -c %F instrui stat a produzir apenas o tipo do arquivo, consulte o stat (1) para mais. * BSD stat não é o mesmo que o GNU stat , as strings de formato são diferentes, use -f %HT .

    
por 23.01.2015 / 11:31
0

Acho que o que você quer é:

ls -l filename

man é seu amigo:

man ls
    
por 23.01.2015 / 04:04