Muchas utilidades de Unix tratan los enlaces simbólicos de manera diferente dependiendo de si hay una barra inclinada final.
Este comportamiento se describe en la documentación de POSIX Symbolic Link y también se menciona en la documentación de GNU coreutils .
Básicamente, la barra diagonal final significa seguir (o "desreferenciar") el enlace simbólico.
Por ejemplo, en el siguiente código, dirlink
significa el enlace simbólico, pero dirlink/
significa el directorio al que apunta el enlace simbólico. rm
no eliminará un directorio a menos que usted lo diga rm -r
, pero rm
sin opciones eliminará felizmente un enlace simbólico.
$ mkdir dir
$ ln -s dir dirlink
$ ls -l
total 4
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:26 dir
lrwxrwxrwx 1 mikel mikel 3 2011-02-02 22:26 dirlink -> dir
$ ls -l
total 4
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:26 dir
lrwxrwxrwx 1 mikel mikel 3 2011-02-02 22:26 dirlink -> dir
$ rm dirlink/
rm: cannot remove `dirlink/': Is a directory
$ rm dirlink
$ ls -l
total 4
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:26 dir
También es útil para ver los permisos de un directorio, sin tener que preocuparse si el directorio es un directorio real o simplemente un enlace simbólico a un directorio.
$ ls -ld dirlink
lrwxrwxrwx 1 mikel mikel 3 2011-02-02 22:46 dirlink -> dir
$ ls -ld dirlink/
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:46 dirlink/
y todavía funciona para directorios regulares:
$ ls -ld dir
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:46 dir
$ ls -ld dir/
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:46 dir/
Otro ejemplo es el find
comando. Si path
le pide que busque en un enlace simbólico, no seguirá el enlace simbólico por defecto, lo que significa que solo procesa el enlace simbólico. Agregar una barra inclinada final hace que trate el enlace simbólico como el directorio al que apunta el enlace.
$ find dir
dir
dir/file
$ find dirlink
dirlink
$ find dirlink/
dirlink/
dirlink/file
(algunas versiones de find tienen una opción -follow
u -L
opción, pero eso hace que siga todos los enlaces simbólicos, no solo el primero)
En el caso de rsync
, si debe agregar una barra inclinada depende de si desea que el directorio que está copiando sea un subdirectorio o no.
$ mkdir dir
$ touch dir/file
$ rsync -r dir dir.bak
$ find .
.
./dir
./dir/file
./dir.bak
./dir.bak/dir
./dir.bak/dir/file
$ rm -r dir.bak
$ rsync -r dir/ dir.bak
$ find .
.
./dir
./dir/file
./dir.bak
./dir.bak/file
En otras palabras:
rsync dir dir.bak
copias dir
en dir.bak
, haciendo dir
adentrodir.bak
rsync dir/ dir.bak
copia todo el contenido de dir
, sin hacer dir
dentrodir.bak