Diferencia entre incluir / al final de la ruta de un directorio y omitirlo

Diferencia entre incluir / al final de la ruta de un directorio y omitirlo

Solo me pregunto si hay alguna diferencia en lo que sucede cuando salgo/al final de la ruta de un archivo, por ejemplo:

root /var/www/website.com/

Y omitiéndolo como:

root /var/www/website.com

¿Cómo se maneja esto o hay alguna diferencia?

Respuesta1

La barra diagonal después del nombre de un directorio es importante en algunos programas y no en otros. Por ejemplo:

  • En git, /después del nombre del archivo significa solo directorio y no un solo archivo (de man 5 gitignore):

    Si el patrón termina con una barra diagonal, se elimina a los efectos de la siguiente descripción, pero solo encontrará una coincidencia con un directorio. En otras palabras, foo/ coincidirá con un directorio foo y las rutas debajo de él, pero no coincidirá con un archivo normal o un enlace simbólico foo (esto es consistente con la forma en que funciona pathspec en general en git).

  • DesdelsWikipedia):

    Cuando se solicita una lista de directorio de un enlace simbólico que apunta a un
    directorio, sólo se mostrará el enlace en sí. Para
    obtener una lista del directorio vinculado, la ruta debe
    incluir un carácter separador de directorio final ('/', barra diagonal).

  • sin embargo, algunos otros programas que no recuerdo ahora (en su mayoría macros de Emacs que vi) que esperan solo un directorio y no un archivo normal aceptarán ambos diry dir/agregarán /cuando sea necesario, por ejemplo, para hacer referencia a un archivo dentro de dir.

No sé cómo funciona nginx pero mirala respuesta de muru.

Respuesta2

En general, una ruta que no tiene una barra diagonal es ambigua: puede ser un archivo o un directorio. Una ruta con una barra diagonal final sólo puede ser un directorio. La mayoría de los shells le dan la barra diagonal automáticamente cuando utiliza la función de finalización de tabulación.

Eso no significa que siempre debas usar una barra diagonal; de hecho, algunos programas no permiten su uso. Como dijeron los demás, depende del contexto. Cada programa interpreta esto de manera diferente.

Un ejemplo en el que una barra diagonal marca una gran diferencia es rsync.

Dados los directorios sourcey target, el comando rsync -a source targetcopiaría todo a target/source. Pero con una barra diagonal, rsync -a source/ targetcopia el contenido de sourcedirectamente target, sin crear un target/sourcesubdirectorio.

A menudo me confunde este comportamiento, por lo que en lugar de confiar en la creación implícita de subdirectorios, prefiero escribirlo. A veces incluso uso un final /.para asegurarme de que no se creen subdirectorios no deseados, ya que el subdirectorio .ya está allí.

Respuesta3

El contexto realmente importa. Para nginx, aunque especifica rootuna ubicación, no hace ninguna diferencia, ya que nginxsabe que es un directorio. Sin embargo, puede marcar la diferencia en otros lugares, ya queLas barras dobles pueden causar problemas en las URL.(es decir, si hace algo como blah/$request_urimientras reescribe o realiza proxy).

En general, no hay diferencia cuando se trata de plataformas *nix. Hay algunas excepciones:

  • rsyncse comporta de manera diferente dependiendo de si la ruta del directorio de origen tiene una barra diagonal o no.Un buen ejemplo de cómo trata rsync las barras diagonales.
  • Agregar una barra diagonal puede hacer que una aplicación se dé cuenta de que está buscando un directorio, en lugar de crear accidentalmente un archivo:

    cp blah non-existent-directory
    cp blah non-existent-directory2/
    
  • De manera similar a lo anterior, en global, se puede usar para forzar la expansión solo a directorios:

    $ printf "%s\n" * | wc -l
    26
    $ printf "%s\n" */ | wc -l
    20
    

    Disculpe el ejemplo. Se realiza en la raíz de una instalación de Ubuntu bastante estándar, por lo que no se dañaron nombres extraños durante la ejecución de este ejemplo.

Respuesta4

Si escribes en el shell:

    ruta del cd/somedir

Mueve su directorio actual aruta/somedir.
Pero si escribes:

    ruta del CD/somedir/

Imprime:

    bash: cd: ruta/somedir/: No existe tal archivo o directorio

Quizás porque el /carácter significa que la ruta no está completa, sino que continúa, por lo que si no pones nada después es lo mismo que hacer referencia a un archivo inexistente.

información relacionada