Ist es möglich, die vollständige Suite von Unix-Optionen für die Befehlszeilentools unter OS X abzurufen?

14

Ich folge Unix Tool Tip auf Twitter und es ist interessant, dass viele der dort veröffentlichten Tipps nicht auf OS X verfügbar sind.

Zum Beispiel:

cp - u kopiert nur Dateien, die nicht existieren oder neuer sind als ihre bestehenden Gegenstücke, in das Zielverzeichnis.

Der Versuch, dies auf meinem Computer auszuführen, führt zu folgenden Ergebnissen:

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  

Warum sind diese Optionen nicht verfügbar und können Sie unter OS X darauf zugreifen?

KennyPeanuts
quelle
Sie können auch find, sed und awk mit installieren brew install coreutils findutils gnu-sed gawk. Siehe apple.stackexchange.com/questions/69223/… .
Lri
Warnung: Wenn Sie die GNU-Versionen der CLI-Tools installieren und verwenden, erhalten Sie die GNU-Erweiterungen, verlieren jedoch auch die Erweiterungen in der OS X-Version der Tools. Zum Beispiel kann der Befehl cp in den coreutils von homebrew (benannt gcp, um Verwirrung zu vermeiden) die komplexen Metadaten, die OS X-Dateien haben können (erweiterte attrs usw.), nicht kopieren. Wenn Sie also gcpeine Alias-Datei verwenden, fehlen der Kopie wichtige Informationen und sie funktioniert nicht.
Gordon Davisson
@ GordonDavisson danke für die Köpfe nach oben. Geht die hinzugefügte .file in alle meine Verzeichnisse? Ich denke, das kann ein Plus sein :)
KennyPeanuts
@KennyPeanuts: Meinen Sie die .DS_Store-Datei? Das ist ähnlich, aber nicht das, wovon ich spreche (und gcp -Rwird es zusammen mit allem anderen kopieren). Wenn Sie meinen ._somefilename, das ist eine AppleDouble-Datei, die zum Speichern von Metadaten (die Informationen, von denen ich spreche) auf einigen Arten von fremden Volumes verwendet wird, was ... kompliziert ist ...
Gordon Davisson
@GordonDavisson danke für die Klarstellung. Es sind diese ._somefilename-Dateien, über die ich spreche.
KennyPeanuts

Antworten:

12

Holen Sie sich Homebrew und lassen Sie die Kerndienstprogramme installieren. Sie können dann sehen, ob die GNU-Version von cp die von Ihnen gewünschten Flags unterstützt. Hier ist eine gute Antwort auf einer Partnerseite und ich werde die genauen Schritte, die erforderlich sind, um cp durch die GNU-Version zu ersetzen, auflisten, wenn Sie dies wünschen:

Hier ist Homebrew - http://mxcl.github.com/homebrew/
Hier ist die lange Geschichte - https://superuser.com/questions/476575/replace-os-xs-shell-commands-with-the-linux-versions/ 476594 # 476594


Ein Beispiel für eine solche Umgebung ist [Homebrew] ( http://mxcl.github.com/homebrew/ ), die sedunter anderem GNU enthält . Sobald Sie Homebrew installiert haben, können Sie eingeben

brew install coreutils

und installiere die GNU Coreutils . Dies wird Ihnen mit sed, date, printf, wcund viele andere Tools , die mit GNU / Linux versenden, aber nicht OS X. Allerdings, um nicht zu „überschreiben“ default OS X Binärdateien, werden sie mit dem Präfix werden gstandardmäßig aktiviert . Wenn Sie also nach der Installation von Coreutils GNU sed verwenden möchten, geben Sie Folgendes ein

gsed

Wenn dies jedes Mal zu umständlich ist, können Sie Ihrem PATH ein "gnubin" -Verzeichnis hinzufügen und GNU sed mit aufrufen sed. Sie müssen Folgendes zu Ihrer hinzufügen ~/.bash_profile:

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

bmike
quelle
Ist es in Ordnung, mit zu installieren port?
Adil Soomro
1
@AdilSoomro macports.org ist ein langjähriges Tool mit einem guten Ruf. Ich sehe keinen Grund, es nicht zu versuchen - ich habe einfach keine Erfahrung und benutze und trage zu Homebrew bei.
bmike
3

Der Grund dafür ist, dass OSX BSD-Befehlszeilentools verwendet und die Benutzer des Unix-Tooltips wahrscheinlich Linux verwenden, das GNU-Befehlszeilentools verwendet.

Sie können GNU-Tools unter OSX (und BSD unter Linux) installieren.

Am einfachsten ist es, einen Paketmanager wie Macports, Homebrew oder Fink zu verwenden

Kennzeichen
quelle