Considerar cp a b/c
.
Si c
no existe (y b
lo hace), se interpretará como un nombre para la copia de a
, así terminarás con b/c
.
Por otro lado si c
existe y es un directorio, se interpretará como una ruta donde colocar a
bajo el nombre sin cambios a
, así terminarás con b/c/a
.
Supongo que al principio /home/jake/project/__workspace/scalaProjects/scalaML/src/main/scala
no existe, solo hay /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
.
Tu primer comando crea scala
Actuando como (1). Puede ser algo confuso porque tienes scala
en lugar de a
y c
, por lo que no es obvio que tenga lugar un cambio de nombre trivial (desde scala
a scala
). Entonces el segundo comando actúa como (2).
Este comando funcionará como el primero, independientemente de si el objetivo scala
existe, si solo /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
existe:
cp -av /home/jake/transit/scalaProjects/scalaML/src/main/scala /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
Pero Si /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
no existe y /home/jake/project/__workspace/scalaProjects/scalaML/src/
Tu scala
será colocado allí bajo el nombre main
. Este es el comportamiento (1) de nuevo.
Para deshacerse de esta ambigüedad utiliza -t
:
cp -av /home/jake/transit/scalaProjects/scalaML/src/main/scala -t /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
Esto hace cp
interpretar main
como un directorio donde quieres colocar scala
. No se llevará a cabo ningún cambio de nombre. Si /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
no existe cp
lanzará un error.