Considere cp a b/c .
-
Se
cnão existir (ebo fizer), ele será interpretado como um nome para a cópia dea, portanto, você terminará comb/c. -
Por outro lado, se
cexistir e for um diretório, ele será interpretado como um caminho para colocarano 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.