cp -av Diretório de duplicação

0
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

A primeira linha copia para / src / main / scala

MAS

as segundas cópias para / src / test / scala / scala

Estou no servidor Ubuntu 16.

Tenho certeza de que estou sentindo falta de algo, mas estou confuso. Qualquer ajuda seria apreciada

    
por Jake 15.02.2018 / 06:01

2 respostas

1

Considere cp a b/c .

  1. Se c não existir (e b o fizer), ele será interpretado como um nome para a cópia de a , portanto, você terminará com b/c .

  2. Por outro lado, se c existir e for um diretório, ele será interpretado como um caminho para colocar a no nome inalterado a , assim você terminará com b/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.

    
por 15.02.2018 / 16:44
0

Eu encontrei o problema e a solução. Um arquivo oculto permaneceu no diretório mesmo que eu tenha tentado uma exclusão completa do diretório anteriormente ( rm -rf ).

Este arquivo .fuse_hidden foi criado pelo sistema de arquivos porque uma sessão do servidor SFTP ainda mantinha um link para o arquivo. (Eu tinha aberto anteriormente um arquivo nesse diretório via mobaxterm).

Fechar a sessão no meu terminal mobaxterm que abriu o arquivo, levou à remoção do arquivo oculto e depois todo o resto funcionou bem. Observe que fechar o arquivo que eu abri remotamente era insuficiente para resolver o problema.

veja aqui para uma melhor explicação

    
por 17.02.2018 / 04:16

Tags