2012-06-28 19 views
19

En Linux, tengo una opción --parents disponibles para el comando cp para poder haceropción cp --parents en mac

cp --parents test/withintest/go.rb test2 

http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html

En Mac, no tengo esta opción disponible. ¿Hay alguna manera de hacer esto en Mac? ¿Por qué esta opción no está disponible?

PS. El propósito de --parents es la siguiente:

‘--parents’ formar el nombre de cada archivo de destino añadiendo al directorio de destino una barra y el nombre especificado del archivo de origen.

El último argumento dado a cp debe ser el nombre de un directorio existente .

Por ejemplo, el comando:

 cp --parents a/b/c existing_dir 

copia el archivo a/b/c para existing_dir/a/b/c, la creación de cualquier directorio intermedio que faltan.

Respuesta

17

Usted puede utilizar el comando ditto en Mac OS X:

La forma básica

ditto <src-path> <dst-path> 

hace lo que quiere. También hay muchas más opciones: revisa el man page.

+0

perfecto. 'ditto some/dir/structure/file/tmp/some/dir/structure/file' crea los directorios some/dir/structure bajo/tmp, como se desee. – ca2longoria

+5

No veo cómo responde esto a la pregunta original. 'cp --parents a/b/c existing_dir' y' ditto a/b/c existing_dir' parecen hacer cosas diferentes. – Alec

+1

@alecb Creo que la respuesta fue abordar lo que el PO realmente quería lograr, en lugar del método exacto. Estaba pasando por el mismo proceso de pensamiento cuando descubrí el comando 'ditto'. – Echelon

32

Esto me molestó bastante también. Una solución para esto podría ser utilizar rsync.

rsync -R test/withintest/go.rb test2 

tiene el mismo efecto que cp --parents y OS X viene de serie con rsync.

2

Puede instalar la versión GNU de cp usando MacPorts.

Después de instalar MacPorts puede instalar los paquetes de Coreutils:

sudo port install coreutils 

Entonces usted será capaz de utilizar la versión de GNU cp y otros utilitites básicos (ls, date, cat, etc.) con el prefijo comando con un g:

gcp --parents test/withintest/go.rb test2 

Si desea que estas versiones de GNU para ser utilizados por defecto puede agregar el cubo de GNU actualizar su ruta. Añadir lo siguiente a su ~/.bash_profile:

export PATH="/opt/local/libexec/gnubin:$PATH" 
0

no me reemplace cp cp mac con GNU. Tampoco lo usaría porque no es multiplataforma.En lugar de utilizar herramientas multiplataforma, como rsync:

rsync <srcDir/srcFile> <dst> 

Resultado: DST/SRCDIR/SRCFILE

Cuestiones relacionadas