Trato de poner un final /
en el objetivo.
Si cometo un error y el origen y el destino son archivos en lugar de directorios, agrego el /
significa que obtendré un error; sin el /
aplastará el archivo de destino.
(La finalización de la pestaña generalmente agregará el final /
de todos modos, por lo que generalmente es más fácil agregarlo que no hacerlo).
Consulte la respuesta de Volker Siegel para obtener más detalles.
Sin barra diagonal final en el directorio de origen
No deberías coloque una barra inclinada final en el directorio de origen:
El punto es relevante para cp
- pero también a mv
, donde es mucho más importante .
Citaré la advertencia del manual:tenga en cuenta que no se encuentra en la página del manual, sino en la página de información info coreutils 'mv invocation'
:
Advertencia :Evite especificar un nombre de fuente con una barra inclinada al final, cuando podría ser un enlace simbólico a un directorio. De lo contrario, 'mv' puede hacer algo muy sorprendente, ya que su comportamiento depende de la llamada al sistema de cambio de nombre subyacente. En un sistema con un kernel moderno basado en Linux, falla con 'errno=ENOTDIR'. Sin embargo, en otros sistemas (al menos FreeBSD 6.1 y Solaris 10) cambia silenciosamente no el enlace simbólico sino el directorio al que hace referencia el enlace simbólico.
Usar barras inclinadas en el directorio de destino
Si desea mover archivos y directorios a un directorio, debe agregar una barra inclinada al final del directorio de destino.
No cambia nada mientras todo vaya bien.
Pero puede salvarlo de un error común que provoca la pérdida o el cambio de datos:
Si mueve un archivo a un directorio, hay dos cosas que pueden salir mal:
Es posible que haya escrito mal el último componente del nombre del directorio de destino, como un carácter incorrecto. Dos de las cosas que pueden suceder son estos dos casos:
-
Si el nombre mal escrito no existe:
-
el archivo se renombrará con el nombre mal escrito
-
se mueve al directorio principal del destino deseado
-
Así que no termina donde estaba, ni donde esperas que vaya.
-
-
Si el nombre mal escrito no existe, y es un archivo:
-
el archivo sobrescribirá el archivo con el nombre mal escrito, en el directorio principal del destino.
-
Nuevamente, no lo encontrará donde estaba, o donde debería estar:simplemente desapareció.
-
Si usa una barra inclinada final en el directorio de destino, se evitan ambos casos:
Hace mv
no lo use como un nombre de archivo cuando lo haría normalmente. En su lugar, mv
solo da un error:
mv: failed to access ‘foo/’: Not a directory
Eliminar automáticamente las barras
Hay una opción especial para cp
y mv
para mitigar el riesgo eliminando siempre la barra inclinada de los directorios src:
Some GNU programs (at least `cp' and `mv') allow you to remove any
trailing slashes from each SOURCE argument before operating on it. The
`--strip-trailing-slashes' option enables this behavior.
This is useful when a SOURCE argument may have a trailing slash and
specify a symbolic link to a directory. This scenario is in fact rather
common because some shells can automatically append a trailing slash
when performing file name completion on such symbolic links. Without
this option, `mv', for example, (via the system's rename function) must
interpret a trailing slash as a request to dereference the symbolic link
and so must rename the indirectly referenced _directory_ and not the
symbolic link. Although it may seem surprising that such behavior be
the default, it is required by POSIX and is consistent with other parts
of that standard.