È possibile ottenere la suite completa di opzioni unix per gli strumenti da riga di comando su OS X?


14

Seguo Unix Tool Tip su Twitter ed è interessante notare che molti dei suggerimenti pubblicati non sono disponibili su OS X.

Per esempio:

cp - u copierà solo i file che non esistono o sono più recenti delle loro controparti esistenti nella directory di destinazione.

Provando questo sulla mia macchina si ottiene:

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  

Perché queste opzioni non sono disponibili ed è possibile accedervi su OS X?


Puoi anche installare find, sed e awk con brew install coreutils findutils gnu-sed gawk. Vedi apple.stackexchange.com/questions/69223/… .
Lri,

Attenzione: se installi e usi le versioni GNU degli strumenti cli, ottieni le estensioni GNU, ma perdi anche le estensioni nella versione OS X degli strumenti. Ad esempio, il comando cp nei coreutils di homebrew (chiamato gcpper evitare confusione) non sa come copiare i metadati complessi che possono avere i file OS X (attrs estesi, ecc.); quindi se si utilizza gcpsu un file alias, la copia mancherà di informazioni importanti e non funzionerà.
Gordon Davisson,

@GordonDavisson grazie per l'heads-up. È questo .file che viene aggiunto andare in tutte le mie directory? Penso che possa essere un vantaggio :)
DQdlM,

@KennyPeanuts: intendi il file .DS_Store? È simile ma non è quello di cui sto parlando (e gcp -Rlo copierò insieme a tutto il resto). Se vuoi dire ._somefilename, questo è un file AppleDouble utilizzato per archiviare i metadati (le informazioni di cui sto parlando) su alcuni tipi di volumi stranieri, il che è ... complicato ...
Gordon Davisson,

@GordonDavisson grazie per il chiarimento. Sono quei file ._somefilename di cui sto parlando.
DQdlM,

Risposte:


12

Ottieni homebrew e fai installare le utility di base. Puoi quindi vedere se la versione GNU di cp supporta le bandiere che desideri. Ecco una buona risposta su un sito partner e trarrò gli esatti passaggi necessari per sostituire cp con la versione GNU se lo desideri:

Ecco homebrew - http://mxcl.github.com/homebrew/
Ecco la lunga storia - /superuser/476575/replace-os-xs-shell-commands-with-the-linux-versions/ 476.594 # 476.594


Un esempio di tale ambiente è [Homebrew] ( http://mxcl.github.com/homebrew/ ) che ad esempio ha GNU sedtra le altre cose. Dopo aver installato Homebrew, puoi digitare

brew install coreutils

e installa GNU Coreutils . Questi vi fornirà sed, date, printf, wce molti altri strumenti forniti con GNU / Linux, ma non OS X. Tuttavia, in modo da non binari OS X di default "override", saranno preceduti dal prefisso gdi default. Quindi, dopo aver installato Coreutils, se si desidera utilizzare GNU sed, digitare

gsed

Se questo è troppo fastidioso da digitare ogni volta, puoi aggiungere una directory "gnubin" al tuo PATH e chiamare GNU sed sed. Dovrai aggiungere quanto segue al tuo ~/.bash_profile:

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


Va bene installare usando port?
Adil Soomro,

1
@AdilSoomro macports.org è uno strumento di vecchia data con una buona reputazione. Non vedo alcun motivo per non provarlo: non ho esperienza e uso e contribuisco all'homebrew.
bmike

3

Il motivo è che OSX utilizza gli strumenti da riga di comando BSD e gli utenti della descrizione comandi Unix probabilmente usano Linux che utilizza gli strumenti da riga di comando GNU.

È possibile installare strumenti GNU su OSX (e BSD su Linux).

Il modo più semplice è utilizzare un gestore di pacchetti come Macports, Homebrew o Fink

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.