Estoy en OS X El Capitan . Tengo 2 directorios SourceDir y DestDir con las siguientes estructuras.

ParentDir/SourceDir |-s_dir1/ss_dir1
                    |-s_dir2

ParentDir/DestDir |-s_dir1/ss_dir2
                  |-ddir1
                  |-ddir2
                  |-ddir3

Quiero hacer un comando de copia de tal manera que s_dir1 en ParentDir/SourceDir se fusione con s_dir1 en ParentDir/DestDir y adicionalmente, s_dir2 se coloque en {{ X5}}. Entonces, después de la copia ParentDir/DestDir debería verse así:

ParentDir/DestDir |-s_dir1/ss_dir1
                  |-s_dir1/ss_dir2
                  |-s_dir2
                  |-ddir1
                  |-ddir2
                  |-ddir3

Utilizo el siguiente comando para copiar:
cp -f -R ParentDir/SourceDir/ ParentDir/DestDir/

Funciona todo bien en MacOS Sierra . Pero extrañamente no funciona en una máquina OS X con MacOS El Capitan . Una vez más, lo probé con un MacOS El Capitan en la máquina de mi colega. ¡Funcionó bien!

¿Qué pasa?

¿Las diferentes versiones de MacOS El Capitan se comportan de manera diferente a cp command?

¿O necesito cambiar la sintaxis del comando de copia en El Capitan ?

¿Cómo puedo hacer un comando de copia en mi máquina MacOS El Capitan para asegurar la copia recursiva correcta al menos en todas las máquinas OSX?

No sugiera actualizar la máquina El Capitan a Sierra . Esa no es una opción para mí. Por lo tanto, publiqué esta pregunta para obtener otras opciones de sintaxis de copy command.

0
programmer_of_the_galaxies 10 jun. 2017 a las 20:11

2 respuestas

La mejor respuesta

Parece que el comando estándar cp está siendo anulado por otra cosa. Puede forzarlo a usar el comando estándar cp especificando explícitamente /bin/cp. También puede tratar de anular la anulación actual utilizando algo como un alias, pero sería mejor averiguar cuál es la anulación actual, de dónde viene y (tal vez) deshacerse de ella.

Lo primero que debe hacer es ejecutar type cp su salida le dice lo que cp está haciendo actualmente:

  • Si imprime algo como "cp es / usr / local / bin / cp", entonces tiene una versión personalizada de cp que anula la versión estándar ... y aparentemente está causando problemas. Su mejor opción aquí es averiguar qué está instalado el comando no estándar cp (¿tal vez homebrew?) Y eliminarlo.
  • Si imprime algo como "cp tiene un alias para ", entonces tiene un alias definido en uno de sus archivos de inicialización de shell (o uno de los archivos que ejecutan, etc.). Verifique su ~ / .profile, ~ / .bash_profile, ~ / .bash_login y ~ / .bashrc para conocer el origen de la definición de alias.
  • Si imprime "cp es una función", entonces tiene una función definida en uno de sus archivos de inicio de shell. Verifique como lo haría para una definición de alias.
1
Gordon Davisson 11 jun. 2017 a las 20:32

El truco para mí fue tener que hacer el comando cp de forma recursiva como superusuario.

No estoy segura de por qué

sudo /bin/cp -R -v -p source destination

-v muestra el progreso a medida que se copia cada archivo.

Salud

Greg

-1
Adam Liss 30 dic. 2018 a las 15:02