Equivalente a "cp --parents" en Mac

Equivalente a "cp --parents" en Mac

El tema lo explica: básicamente tengo un script bash usado en un sistema Linux y un sistema Windows con Cygwin donde el siguiente comando funciona perfectamente:

cp --parents

Sin embargo, ejecutar este mismo comando en Mac en la terminal genera el siguiente error:

cp: illegal option -- -
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory

Estoy usando el comando en este contexto copiando una lista seleccionada de archivos en un directorio de salida y conservando su estructura de directorio:

cp --parents foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file ~/my-output/

¿Qué puedo hacer para obtener el cp --parentscomportamiento?

Respuesta1

--parentsProbablemente sea un comportamiento no POSIX específico de GNU cp, mientras que el BSD derivado cpen OS X no lo tiene.

Probablemente pueda obtener la funcionalidad que desea instalando GNU cpen su Mac y usándola. Probablemente sea parte de un paquete GNU llamado fileutilsy probablemente puedas instalarlo con Homebrew, MacPorts o Fink.

Respuesta2

Logré sintetizar este comando en MAC usando el parámetro Rsync -R para copiar la estructura de directorio relativa del archivo que estaba copiando.

Sintaxis:

rsync -R <list of files to copy> <target dir>

Uso:

rsync -R foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file ~/my-output/

Esto obtiene el mismo resultado, aunque estoy seguro de que probablemente se agregue un poco de sobrecarga al usar RSYNC en lugar de CP.

Respuesta3

Tiene basename? En ese caso:

$ for i in `ls foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file`; do cp $i ~/my-output/`basename $i`; done

información relacionada