cp -av duplicar directorio


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

La primera línea copia a / src / main / scala

PERO

las segundas copias a / src / test / scala / scala

Estoy en el servidor de Ubuntu 16.

Estoy seguro de que me estoy perdiendo algo, pero estoy confundido. Cualquier ayuda sería apreciada


Mire los directorios de origen: sospecho que encontrará que todo el código está en ... / test / scala / scala
davidgo

Respuestas:


1

Considerar cp a b/c.

  1. Si c no existe (y b lo hace), se interpretará como un nombre para la copia de a, así terminarás con b/c.

  2. Por otro lado si c existe y es un directorio, se interpretará como una ruta donde colocar a bajo el nombre sin cambios a, así terminarás con b/c/a.

Supongo que al principio /home/jake/project/__workspace/scalaProjects/scalaML/src/main/scala no existe, solo hay /home/jake/project/__workspace/scalaProjects/scalaML/src/main/.

Tu primer comando crea scala Actuando como (1). Puede ser algo confuso porque tienes scala en lugar de a y c, por lo que no es obvio que tenga lugar un cambio de nombre trivial (desde scala a scala ). Entonces el segundo comando actúa como (2).


Este comando funcionará como el primero, independientemente de si el objetivo scala existe, si solo /home/jake/project/__workspace/scalaProjects/scalaML/src/main/ existe:

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

Pero Si /home/jake/project/__workspace/scalaProjects/scalaML/src/main/ no existe y /home/jake/project/__workspace/scalaProjects/scalaML/src/ Tu scala será colocado allí bajo el nombre main. Este es el comportamiento (1) de nuevo.

Para deshacerse de esta ambigüedad utiliza -t:

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

Esto hace cp interpretar main como un directorio donde quieres colocar scala. No se llevará a cabo ningún cambio de nombre. Si /home/jake/project/__workspace/scalaProjects/scalaML/src/main/ no existe cp lanzará un error.


Kamil, tu respuesta fue útil ... pero para ti, el problema fue con un archivo oculto (mira mi respuesta a continuación)
Jake

0

He encontrado el problema y la solución. Un archivo oculto permaneció en el directorio a pesar de que había intentado eliminar completamente el directorio anteriormente ( rm -rf ).

Este archivo .fuse_hidden fue creado por el sistema de archivos porque una sesión del servidor SFTP todavía tenía un enlace al archivo. (Había abierto previamente un archivo en ese directorio a través de mobaxterm).

Al cerrar la sesión en mi terminal mobaxterm que había abierto el archivo, se eliminó el archivo oculto y todo lo demás funcionó bien. Tenga en cuenta que cerrar el archivo que había abierto de forma remota no fue suficiente para resolver el problema.

ver aquí para una mejor explicación

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.