Посмотрим cp a b/c
.
Если
c
не существует (иb
существует), оно будет интерпретировано как имя для копииa
, так что вы закончите сb/c
.С другой стороны, если
c
он существует и это каталог, он будет интерпретирован как путь к местуa
под неизменным именемa
, поэтому вы закончите сb/c/a
.
Я думаю, в начале /home/jake/project/__workspace/scalaProjects/scalaML/src/main/scala
не существует, есть только /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
.
Ваша первая команда создает scala
действующий как (1). Это может несколько сбивать с толку, потому что у вас scala
вместо a
и c
, так что не очевидно, что происходит какое-то тривиальное переименование (от scala
к scala
). Тогда вторая команда действует как (2).
Эта команда будет работать как ваша первая, независимо от того, scala
существует ли цель, если она /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
существует:
cp -av /home/jake/transit/scalaProjects/scalaML/src/main/scala /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
Но если /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
не существует и /home/jake/project/__workspace/scalaProjects/scalaML/src/
существует, вы scala
будете помещены туда под именем main
. Это снова поведение (1).
Чтобы избавиться от этой неоднозначности используйте-t
:
cp -av /home/jake/transit/scalaProjects/scalaML/src/main/scala -t /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
Это делает cp
интерпретировать main
как каталог, где вы хотите разместить scala
. Переименование не будет. Если /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
не существует, cp
выдаст ошибку.