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

14

Sigo la información sobre herramientas de Unix en Twitter y es interesante que muchos de los consejos publicados no estén disponibles en OS X.

Por ejemplo:

cp - u solo copiará archivos que no existen, o son más nuevos que sus equivalentes 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?

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

Respuestas:

12

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

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


Un ejemplo de dicho entorno es [Homebrew] ( http://mxcl.github.com/homebrew/ ) que, por ejemplo, tiene GNU, sedentre otras cosas. Una vez que haya instalado Homebrew, puede escribir

brew install coreutils

e instale los GNU Coreutils . Estos le proporcionará sed, date, printf, wcy muchas otras herramientas que se incluyen con GNU / Linux, pero no OS X. Sin embargo, a fin de no "override" binarios OS X por defecto, van a tener el prefijo gpor defecto. Entonces, después de instalar Coreutils, si desea usar GNU sed, escriba

gsed

Si esto es demasiado complicado de 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"

bmike
fuente
¿Está bien instalar usando port?
Adil Soomro
1
@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 y uso y contribuyo a homebrew.
bmike
3

La razón es que OSX usa herramientas de línea de comando BSD y los usuarios de información sobre herramientas de Unix probablemente estén usando Linux que usa herramientas de línea de comando 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

usuario151019
fuente