¿Es posible obtener el conjunto completo de opciones de Unix para las herramientas de línea de comandos en OS X?

Sigo la sugerencia de herramientas de Unix en Twitter y es interesante que muchas de las sugerencias que se publican no están disponibles en OS X.

Por ejemplo:

cp - u solo copiará archivos que no existen, o que son más nuevos que sus contrapartes existentes, en el directorio de destino.

Probar esto en mi máquina da como resultado:

cp: illegal option -- u
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  

¿Por qué estas opciones no están disponibles y es posible acceder a ellas en OS X?

También puede instalar find, sed y awk con brew install coreutils findutils gnu-sed gawk. Consulte apple.stackexchange.com/questions/69223/… .
Advertencia: si instala y usa las versiones GNU de las herramientas cli, obtiene las extensiones de GNU, pero también pierde las extensiones en la versión de OS X de las herramientas. Por ejemplo, el comando cp en coreutils de homebrew (nombrado gcppara evitar confusiones) no sabe cómo copiar los metadatos complejos que pueden tener los archivos OS X (atributos extendidos, etc.); por lo tanto, si lo usa gcpen un archivo de alias, a la copia le faltará información crítica y no funcionará.
@GordonDavisson gracias por el aviso. ¿Es ese el archivo .que se agrega a todos mis directorios? Creo que eso puede ser una ventaja :)
@KennyPeanuts: ¿Te refieres al archivo .DS_Store? Eso es similar pero no de lo que estoy hablando (y gcp -Rlo copiaré junto con todo lo demás). Si quiere decir ._somefilename, es un archivo AppleDouble usado para almacenar metadatos (la información de la que estoy hablando) en algunos tipos de volúmenes extranjeros, lo cual es... complicado...
@GordonDavisson gracias por la aclaración. Son esos archivos ._somefilename de los que estoy hablando.
MacOS se comporta como BSD, no como GNU.

Respuestas (2)

Obtenga homebrew y haga que instale las utilidades principales. Luego puede ver si la versión GNU de cp admite las banderas que desea. Aquí hay una buena respuesta en un sitio asociado y extraeré los pasos exactos que necesitará para reemplazar cp por la versión GNU si lo desea:

Aquí está homebrew - Enlace
Aquí está la larga historia - https://superuser.com/questions/476575/replace-os-xs-shell-commands-with-the-linux-versions/476594#476594


Un ejemplo de tal entorno es Homebrew que, por ejemplo, tiene GNU, sedentre otras cosas. Una vez que haya instalado Homebrew, puede escribir

brew install coreutils

e instale GNU Coreutils . Estos le proporcionarán sed, date, printfy wcmuchas otras herramientas que se envían con GNU/Linux, pero no con OS X. Sin embargo, para no "anular" los archivos binarios predeterminados de OS X, tendrán el prefijo gpredeterminado. Entonces, después de instalar Coreutils, si desea usar GNU sed, escriba

gsed

Si esto es demasiado complicado para escribir cada vez, puede agregar un directorio "gnubin" a su RUTA y simplemente llamar a GNU sed con sed. Deberá agregar lo siguiente a su ~/.bash_profile:

PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"

¿Está bien instalar usando port?
@AdilSoomro macports.org es una herramienta de larga data con una buena reputación. No veo ninguna razón para no probarlo, simplemente no tengo experiencia con él. Utilizo y contribuyo al homebrew y puedo soportar sus verrugas y peculiaridades.
@AdilSoomro Sí, MacPorts es muy recomendable sobre otros administradores de paquetes, ya que fue creado por ingenieros de Apple sudo port install coreutils.

La razón es que OSX usa herramientas de línea de comandos BSD y los usuarios de información sobre herramientas de Unix probablemente estén usando Linux, que usa herramientas de línea de comandos GNU.

Puede instalar herramientas GNU en OSX (y BSD en Linux).

La forma más fácil es usar un administrador de paquetes como Macports, Homebrew o Fink