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 --parents
comportamiento?
Respuesta1
--parents
Probablemente sea un comportamiento no POSIX específico de GNU cp
, mientras que el BSD derivado cp
en OS X no lo tiene.
Probablemente pueda obtener la funcionalidad que desea instalando GNU cp
en su Mac y usándola. Probablemente sea parte de un paquete GNU llamado fileutils
y 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