cp -av Каталог удвоения

878
Jake
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.

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

0
Посмотрите на исходные каталоги - я подозреваю, вы найдете, что весь код находится в ... / test / scala / scala davidgo 6 лет назад 0

2 ответа на вопрос

1
Kamil Maciorowski

Посмотрим 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выдаст ошибку.

Камил, твой ответ был полезен ... но, к сожалению, проблема была в скрытом файле (см. Мой ответ ниже) Jake 6 лет назад 0
0
Jake

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

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

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

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

Похожие вопросы