Czy można uzyskać pełny zestaw opcji uniksowych dla narzędzi wiersza poleceń w OS X?


14

Śledzę Unix Tool Tip na Twitterze i interesujące jest to, że wiele opublikowanych porad nie jest dostępnych w systemie OS X.

Na przykład:

cp - u skopiuje tylko pliki, które nie istnieją lub są nowsze niż ich odpowiedniki, w katalogu docelowym.

Wypróbowanie tego na moim komputerze powoduje:

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  

Dlaczego te opcje nie są dostępne i czy można uzyskać do nich dostęp w systemie OS X?


Możesz także zainstalować find, sed i awk za pomocą brew install coreutils findutils gnu-sed gawk. Zobacz apple.stackexchange.com/questions/69223/… .
Lri

Ostrzeżenie: jeśli zainstalujesz i użyjesz wersji GNU narzędzi cli, zyskasz rozszerzenia GNU, ale również utracisz rozszerzenia w wersji narzędzi OS X. Na przykład polecenie cp w coreutils homebrew (nazwane w gcpcelu uniknięcia pomyłek) nie wie, jak skopiować złożone metadane, które mogą mieć pliki OS X (rozszerzone attrs itp.); więc jeśli użyjesz gcppliku aliasu, kopia będzie pozbawiona kluczowych informacji i nie będzie działać.
Gordon Davisson

@GordonDavisson dzięki za heads up. Czy to. Plik, który zostanie dodany, idzie do wszystkich moich katalogów? Myślę, że to może być plus :)
DQdlM

@KennyPeanuts: Czy masz na myśli plik .DS_Store? To jest podobne, ale nie to, o czym mówię (i gcp -Rskopiuję to wraz ze wszystkim innym). Jeśli masz na myśli ._somefilename, to plik AppleDouble służący do przechowywania metadanych (informacji, o których mówię) w niektórych rodzajach obcych woluminów, co jest ... skomplikowane ...
Gordon Davisson

@GordonDavisson dzięki za wyjaśnienie. To te pliki ._somefilename, o których mówię.
DQdlM

Odpowiedzi:


12

Pobierz homebrew i zainstaluj podstawowe narzędzia. Następnie możesz sprawdzić, czy wersja cp GNU obsługuje żądane flagi. Oto dobra odpowiedź na stronie partnerskiej, a jeśli chcesz, wypiszę dokładne kroki, które musisz zastąpić cp wersją GNU:

Oto homebrew - http://mxcl.github.com/homebrew/
Oto długa historia - /superuser/476575/replace-os-xs-shell-commands-with-the-linux-versions/ 476594 # 476594


Przykładem takiego środowiska jest [Homebrew] ( http://mxcl.github.com/homebrew/ ), który na przykład ma sedmiędzy innymi GNU . Po zainstalowaniu Homebrew możesz pisać

brew install coreutils

i zainstaluj GNU Coreutils . Będą one zapewnić Państwu sed, date, printf, wcoraz wiele innych narzędzi, które są dostarczane z systemu GNU / Linux, lecz nie OS X. Jednak, tak aby nie „Zastąp” default OS X binaria, będą one prefiksem gdomyślnie. Więc po zainstalowaniu Coreutils, jeśli chcesz używać GNU sed, wpisz

gsed

Jeśli jest to zbyt kłopotliwe do wpisywania za każdym razem, możesz dodać katalog „gnubin” do PATH i po prostu wywołać GNU sed sed. Musisz dodać do swojego ~/.bash_profile:

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


Czy można instalować za pomocą port?
Adil Soomro

1
@AdilSoomro macports.org to wieloletnie narzędzie o dobrej reputacji. Nie widzę powodu, aby tego nie próbować - po prostu nie mam doświadczenia, korzystam i przyczyniam się do homebrew.
bmike

3

Powodem jest to, że OSX używa narzędzi wiersza poleceń BSD, a użytkownicy podpowiedzi Uniksa prawdopodobnie używają Linuksa, który używa narzędzi wiersza poleceń GNU.

Możesz zainstalować narzędzia GNU na OSX (i BSD na Linux).

Najprostszym sposobem jest użycie menedżera pakietów, takiego jak Macports, Homebrew lub Fink

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.