Betrachten cp a b/c
.
Wenn
c
es nicht existiert (und es nicht gibtb
), wird es als Name für die Kopie von interpretierta
, also enden Sie mitb/c
.Wenn
c
jedoch vorhanden ist und es sich um ein Verzeichnis handelt, wird es als Pfad interpretiert, an dema
der Name unter dem unveränderten Namen platzierta
werden sollb/c/a
.
Ich denke, dass es am Anfang /home/jake/project/__workspace/scalaProjects/scalaML/src/main/scala
nicht existiert, es gibt nur /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
.
Ihr erster Befehl erstellt scala
die Funktion als (1). Es kann etwas verwirrend sein, weil Sie scala
anstelle von a
und haben c
, und daher ist es nicht offensichtlich, dass eine geringfügige Umbenennung (von scala
bis scala
) stattfindet. Dann fungiert der zweite Befehl als (2).
Dieser Befehl wird als erster Befehl ausgeführt, unabhängig davon, ob das Ziel scala
vorhanden ist oder nur /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
vorhanden ist:
cp -av /home/jake/transit/scalaProjects/scalaML/src/main/scala /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
Aber wenn /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
nicht vorhanden ist und /home/jake/project/__workspace/scalaProjects/scalaML/src/
tut, Sie scala
wird es unter dem Namen gestellt werden main
. Das ist wieder Verhalten (1).
Um diese Mehrdeutigkeit zu beseitigen, verwenden Sie-t
:
cp -av /home/jake/transit/scalaProjects/scalaML/src/main/scala -t /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
Dies macht cp
interpret main
als ein Verzeichnis, in dem Sie platzieren möchten scala
. Es findet keine Umbenennung statt. Wenn /home/jake/project/__workspace/scalaProjects/scalaML/src/main/
nicht vorhanden, cp
wird ein Fehler ausgegeben.