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

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

Zum Beispiel:

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

Wenn ich dies auf meinem Computer ausprobiere, ergibt sich Folgendes:

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 ist es möglich, unter OS X darauf zuzugreifen?

Sie können find, sed und awk auch mit installieren brew install coreutils findutils gnu-sed gawk. Siehe apple.stackexchange.com/questions/69223/… .
Warnung: Wenn Sie die GNU-Versionen der CLI-Tools installieren und verwenden, erhalten Sie die GNU-Erweiterungen, aber Sie verlieren auch die Erweiterungen in der OS X-Version der Tools. Zum Beispiel weiß der cp-Befehl in den Coreutils von Homebrew (benannt gcp, um Verwirrung zu vermeiden) nicht, wie er die komplexen Metadaten kopieren soll, die OS X-Dateien haben können (erweiterte Attribute usw.); Wenn Sie also gcpeine Alias-Datei verwenden, fehlen der Kopie wichtige Informationen und sie funktioniert nicht.
@GordonDavisson danke für den Hinweis. Ist das die .file, die hinzugefügt wird, gehen alle meine Verzeichnisse? Ich denke, das könnte ein Plus sein :)
@KennyPeanuts: Meinst du die .DS_Store-Datei? Das ist ähnlich, aber nicht das, worüber ich spreche (und gcp -Rwerde es zusammen mit allem anderen kopieren). Wenn Sie meinen ._somefilename, das ist eine AppleDouble-Datei, die verwendet wird, um Metadaten (die Informationen, von denen ich spreche) auf einigen Arten von fremden Volumes zu speichern, was ... kompliziert ...
@GordonDavisson danke für die Klarstellung. Ich spreche von diesen ._somefilename-Dateien.
MacOS verhält sich wie BSD, nicht wie GNU.

Antworten (2)

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

Hier ist Homebrew - Link
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 , das beispielsweise sedunter anderem GNU enthält. Sobald Sie Homebrew installiert haben, können Sie tippen

brew install coreutils

und installieren Sie die GNU Coreutils . Diese stellen Ihnen sed, date, printfund wcviele andere Tools zur Verfügung, die mit GNU/Linux geliefert werden, aber nicht mit OS X. Um jedoch die standardmäßigen OS X-Binärdateien nicht zu „überschreiben“, wird ihnen gstandardmäßig das Präfix vorangestellt. Wenn Sie also nach der Installation der Coreutils GNU sed verwenden möchten, geben Sie Folgendes ein

gsed

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

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

Ist es in Ordnung, mit zu installieren port?
@AdilSoomro macports.org ist ein langjähriges Tool mit einem guten Ruf. Ich sehe keinen Grund, es nicht zu versuchen - ich habe nur keine Erfahrung damit. Ich benutze und trage zu Homebrew bei und kann seine Warzen und Besonderheiten ertragen.
@AdilSoomro Ja, MacPorts wird gegenüber anderen Paketmanagern dringend empfohlen, da es von Apple-Ingenieuren erstellt wurde - sudo port install coreutils.

Der Grund dafür ist, dass OSX BSD-Befehlszeilentools verwendet und die Unix-Tooltip-Benutzer 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