Considere cp a b/c
.
-
Se
c
não existir (eb
o fizer), ele será interpretado como um nome para a cópia dea
, portanto, você terminará comb/c
. -
Por outro lado, se
c
existir e for um diretório, ele será interpretado como um caminho para colocara
no nome inalteradoa
, assim você terminará comb/c/a
.
Eu acho que no começo /home/jake/project/__workspace/scalaProjects/scalaML/src/main/scala
não existe, só há /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
.
Seu primeiro comando cria scala
agindo como (1). Pode ser um pouco confuso porque você tem scala
no lugar de a
e c
, portanto não é óbvio que alguma renomeação trivial ocorra (de scala
a scala
). Então o segundo comando age como (2).
Este comando funcionará como o primeiro, independentemente de existir o destino scala
, se apenas /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
existir:
cp -av /home/jake/transit/scalaProjects/scalaML/src/main/scala /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
Mas se /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
não existir e /home/jake/project/__workspace/scalaProjects/scalaML/src/
, seu scala
será colocado sob o nome main
. Este é o comportamento (1) novamente.
Para se livrar dessa ambiguidade, use -t
:
cp -av /home/jake/transit/scalaProjects/scalaML/src/main/scala -t /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
Isso torna cp
interpretar main
como um diretório no qual você deseja colocar scala
. Nenhuma renomeação ocorrerá. Se /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
não existir, cp
apresentará um erro.