cp -av  /home/jake/transit/scalaProjects/scalaML/src/main/scala /home/jake/project/__workspace/scalaProjects/scalaML/src/main/scala

cp -av  /home/jake/transit/scalaProjects/scalaML/src/test/scala /home/jake/project/__workspace/scalaProjects/scalaML/src/test/scala

Первая строка копируется в /src /main /scala

НО

вторые копии в /src /test /scala /scala

Я на Ubuntu сервере 16.

Я уверен, что что-то упустил, но я в замешательстве. Любая помощь будет оценена

2 ответа2

1

Рассмотрим cp a b/c .

  1. Если c не существует (а b существует), оно будет интерпретировано как имя для копии a , поэтому вы закончите с b/c .

  2. С другой стороны, если 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 выдаст ошибку.

0

Я нашел проблему и решение. Скрытый файл остался в каталоге, хотя ранее я пытался полностью удалить каталог (rm -rf).

Этот файл .fuse_hidden был создан файловой системой, поскольку сеанс SFTP-сервера все еще содержал ссылку на файл. (Я ранее открыл файл в этом каталоге через mobaxterm).

Закрытие сессии на моем терминале mobaxterm, который открыл файл, привел к удалению скрытого файла, а затем все остальное работало нормально. Обратите внимание, что закрытие файла, который я открыл удаленно, было недостаточно для решения проблемы.

смотрите здесь для лучшего объяснения

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .