Est-il possible d'obtenir la suite complète des options Unix pour les outils de ligne de commande sur OS X?

14

Je suis Astuce Unix sur Twitter et il est intéressant de noter que la plupart des astuces publiées ne sont pas disponibles sur OS X.

Par exemple:

cp - u ne copiera que les fichiers qui n'existent pas ou qui sont plus récents que leurs homologues existants, dans le répertoire de destination.

Essayer ceci sur ma machine se traduit par:

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  

Pourquoi ces options ne sont-elles pas disponibles et est-il possible d'y accéder sous OS X?

DQdlM
la source
Vous pouvez également installer find, sed et awk avec brew install coreutils findutils gnu-sed gawk. Voir apple.stackexchange.com/questions/69223/… .
Lri
Avertissement: si vous installez et utilisez les versions GNU des outils cli, vous gagnez les extensions GNU, mais vous perdez également les extensions dans la version OS X des outils. Par exemple, la commande cp dans les coreutils de homebrew (nommée gcppour éviter toute confusion) ne sait pas comment copier les métadonnées complexes que les fichiers OS X peuvent avoir (attrs étendus, etc.); donc si vous utilisez gcpun fichier d'alias, la copie manquera d'informations critiques et ne fonctionnera pas.
Gordon Davisson
@GordonDavisson merci pour les avertissements. Est-ce le fichier .f qui est ajouté à tous mes répertoires? Je pense que cela peut être un plus :)
DQdlM
@KennyPeanuts: Vous voulez dire le fichier .DS_Store? C'est similaire, mais pas de ce dont je parle (et gcp -Rle copiera avec tout le reste). Si vous voulez dire ._somefilename, c'est un fichier AppleDouble utilisé pour stocker des métadonnées (les informations dont je parle) sur certains types de volumes étrangers, ce qui est ... compliqué ...
Gordon Davisson
@GordonDavisson merci pour la clarification. Ce sont ces fichiers ._somefilename dont je parle.
DQdlM

Réponses:

12

Obtenez homebrew et demandez-lui d'installer les utilitaires de base. Vous pouvez alors voir si la version GNU de cp prend en charge les drapeaux que vous désirez. Voici une bonne réponse sur un site partenaire et je vais extraire les étapes exactes dont vous aurez besoin pour que cp soit remplacé par la version GNU si vous le souhaitez:

Voici homebrew - http://mxcl.github.com/homebrew/
Voici la longue histoire - /superuser/476575/replace-os-xs-shell-commands-with-the-linux-versions/ 476594 # 476594


Un exemple d'un tel environnement est [Homebrew] ( http://mxcl.github.com/homebrew/ ) qui a par exemple GNU sedentre autres. Une fois que vous avez installé Homebrew, vous pouvez taper

brew install coreutils

et installez GNU Coreutils . Ceux - ci vous fournira sed, date, printf, wcet bien d' autres outils livrés avec GNU / Linux, mais pas OS X. Cependant, pour ne pas par défaut « outrepasser » OS X binaires, ils seront préfixées avec gpar défaut. Donc, après avoir installé Coreutils, si vous voulez utiliser GNU sed, tapez

gsed

Si c'est trop compliqué à taper à chaque fois, vous pouvez ajouter un répertoire "gnubin" à votre PATH et appeler simplement GNU sed avec sed. Vous devrez ajouter les éléments suivants à votre ~/.bash_profile:

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

bmike
la source
Est-il correct d'installer en utilisant port?
Adil Soomro
1
@AdilSoomro macports.org est un outil de longue date jouissant d'une bonne réputation. Je ne vois aucune raison de ne pas l'essayer - je n'ai juste aucune expérience et j'utilise et contribue à l'homebrew.
bmike
3

La raison en est qu'OSX utilise des outils de ligne de commande BSD et que les utilisateurs d'astuces Unix utilisent probablement Linux qui utilise des outils de ligne de commande GNU.

Vous pouvez installer les outils GNU sur OSX (et BSD sur Linux).

La façon la plus simple est d'utiliser un gestionnaire de paquets comme Macports, Homebrew ou Fink

user151019
la source