Você pode reconhecer um link por uma pequena seta ( -> ) na saída de ls -l :
ou pela cor distinta, que também aparece na saída de ls , conforme descrito em esta resposta ( test2 é o link):
Anteriormente, eu havia criado alguns links para outra pasta usando o seguinte comando.
sudo ln -s path_name link_name
Esses links estão parecidos com as pastas. Não consigo diferenciar entre uma pasta e um link. Existe uma maneira de encontrar a diferença entre uma pasta e um link para outra pasta?
Você pode reconhecer um link por uma pequena seta ( -> ) na saída de ls -l :
ou pela cor distinta, que também aparece na saída de ls , conforme descrito em esta resposta ( test2 é o link):
Existem muitas maneiras de ver isso. Primeiro de tudo, é indicado na saída de ls -l . Observe que o diretório tem um d no início do campo de permissões, enquanto o link tem um l :
$ ls -l
drwxr-xr-x 2 terdon terdon 4096 Feb 13 14:12 bar
lrwxrwxrwx 1 terdon terdon 3 Feb 13 14:12 foo -> bar
Você também pode usar file :
$ file bar foo
bar: directory
foo: symbolic link to 'bar'
Outra opção é readlink , que segue os links simbólicos para seus destinos:
$ readlink foo
bar
A execução de readlink bar não retornará nenhuma saída (falha, retornando um código de saída diferente de 0), para que você possa fazer algo como:
readlink bar || echo "Not a link!"
ou
readlink foo && "Echo this is a link"
Por fim, você também pode usar find ou o próprio shell para listar todos os links:
find . -type l
ou
for f in *; do [ -L "$f" ] && echo "$f is a link"; done
Leia man [ (ou man test ) e você verá que pode fazer:
for theDir in path_name link_name ; do
if [ -L $theDir ] ; then
echo "$theDir exists and is a symbolic link"
elif [ -d $theDir ] ; then
echo "$theDir exists and is a directory"
fi
done
Alterei a ordem dos testes, portanto, a verificação de um diretório é feita somente se $theDir não for um link.
use ls -F .
isto fará ls acrescentar caracteres a nomes de arquivos
* para arquivos executáveis
/ para diretórios
@ para links simbólicos **
| para FIFOs
> para portas (o que isso significa)
= para soquetes
arquivos regulares não têm classificador no final.
Então, no seu caso, você verá @ no final de cada nome de link simbólico e / no final do diretório real.
No entanto, se você usar ls -l , não verá classificadores para links simbólicos e, em vez disso, verá -> e vincular o destino depois disso.
Você também pode usar stat e file para diferenciar dirs / symlinks
por exemplo:
$ file a
a: directory
$ file b
b: symbolic link to a
$ stat a
File: 'a'
Size: 40 Blocks: 0 IO Block: 4096 directory
[...]
$ stat b
File: 'b' -> 'a'
Size: 1 Blocks: 0 IO Block: 4096 symbolic link
[...]
Tags symbolic-link