Можно ли получить полный набор опций Unix для инструментов командной строки на OS X?

14

Я следую за подсказкой инструментов Unix в Твиттере, и интересно, что многие из опубликованных советов недоступны в OS X.

Например:

cp - u будет копировать только файлы, которые не существуют, или являются более новыми, чем их существующие аналоги, в целевой каталог.

Попытка этого на моей машине приводит к:

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  

Почему эти опции недоступны и возможно ли получить к ним доступ в OS X?

DQdlM
источник
Вы также можете установить find, sed и awk с помощью brew install coreutils findutils gnu-sed gawk. См. Apple.stackexchange.com/questions/69223/… .
Lri
Предупреждение: если вы устанавливаете и используете версии инструментов GNU для GNU, вы получаете расширения GNU, но вы также теряете расширения в версии инструментов OS X. Например, команда cp в coreutils homebrew (названная так, gcpчтобы избежать путаницы) не знает, как скопировать сложные метаданные, которые могут иметь файлы OS X (расширенные атрибуты и т. Д.); поэтому, если вы используете gcpфайл псевдонима, в копии будет отсутствовать критическая информация, и она не будет работать.
Гордон Дэвиссон
@GordonDavisson спасибо за внимание. Это тот файл, который добавляется во все мои каталоги? Я думаю, что это может быть плюсом :)
DQdlM
@KennyPeanuts: Вы имеете в виду файл .DS_Store? Это похоже, но не то, о чем я говорю (и gcp -Rскопирую его вместе со всем остальным). Если вы имеете в виду ._somefilename, это файл AppleDouble, используемый для хранения метаданных (информация, о которой я говорю) на некоторых видах иностранных томов, что ... сложно ...
Гордон Дэвиссон
@GordonDavisson спасибо за разъяснения. Это те файлы ._somefilename, о которых я говорю.
DQdlM

Ответы:

12

Получить homebrew и установить основные утилиты. Затем вы можете увидеть, поддерживает ли версия GNU cp нужные вам флаги. Вот хороший ответ на партнерском сайте, и я опишу точные шаги, необходимые для замены cp на версию GNU, если вы хотите:

Вот доморощенный - http://mxcl.github.com/homebrew/
Вот длинный рассказ - /superuser/476575/replace-os-xs-shell-commands-with-the-linux-versions/ 476594 # 476594


Примером такой среды является [Homebrew] ( http://mxcl.github.com/homebrew/ ), который, например, имеет GNU sed. После того, как вы установили Homebrew, вы можете набрать

brew install coreutils

и установите GNU Coreutils . Это обеспечит вам sed, date, printf, wcи многие другие инструменты , которые поставляются с GNU / Linux, но не OS X. Тем не менее, чтобы не «отменяют» ОС по умолчанию X двоичные файлы, они будут с префиксом gпо умолчанию. Итак, после установки Coreutils, если вы хотите использовать GNU sed, введите

gsed

Если каждый раз вводить слишком сложно, вы можете добавить каталог «gnubin» в PATH и просто вызвать GNU sed с помощью sed. Вам нужно будет добавить следующее к вашему ~/.bash_profile:

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

bmike
источник
Это нормально для установки с помощью port?
Адиль Соомро
1
@AdilSoomro macports.org - это давний инструмент с хорошей репутацией. Я не вижу причин, чтобы не попробовать это - у меня просто нет опыта, я пользуюсь и помогаю домашнему пиву.
bmike
3

Причина в том, что OSX использует инструменты командной строки BSD, а пользователи подсказок Unix, вероятно, используют Linux, который использует инструменты командной строки GNU.

Вы можете установить инструменты GNU на OSX (и BSD на Linux).

Самый простой способ - использовать менеджер пакетов, такой как Macports, Homebrew или Fink.

user151019
источник