Подтвердить что ты не робот

Параметр cp --parents на mac

В Linux у меня есть опция -parents для команды cp, поэтому я могу сделать

cp --parents test/withintest/go.rb test2

http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html

На Mac у меня нет этой опции. Есть ли способ сделать это на Mac? Почему этот параметр недоступен?

PS. Назначение -parents заключается в следующем:

'- родители Введите имя каждого файла назначения, добавив к нему целевой каталог - косая черта и указанное имя исходного файла.

Последний аргумент, заданный cp, должен быть именем существующего каталог.

Например, команда:

      cp --parents a/b/c existing_dir 

копирует файл a/b/c в existing_dir/a/b/c, создавая любые отсутствующие промежуточные каталоги.

4b9b3361

Ответ 1

Вы можете использовать команду ditto в Mac OS X:

Основная форма

ditto <src-path> <dst-path>

делает то, что вы хотите. Там еще много вариантов - просмотрите справочную страницу.

Ответ 2

Это меня очень беспокоило. Обходным путем для этого может быть использование rsync.

rsync -R test/withintest/go.rb test2

имеет тот же эффект, что и cp --parents, а OS X поставляется с стандартом rsync.

Ответ 3

Вы можете установить версию GNU cp с помощью MacPorts.

После установки MacPorts вы можете установить пакеты coreutils:

sudo port install coreutils

Затем вы сможете использовать версию GNU cp и другие основные утилиты (ls, date, cat и т.д.), предварительно добавив команду g:

gcp --parents test/withintest/go.rb test2

Если вы хотите, чтобы эти версии GNU использовались по умолчанию, вы можете добавить в GNU bin обновить свой путь. Добавьте к вашему ~/.bash_profile следующее:

export PATH="/opt/local/libexec/gnubin:$PATH"

Ответ 4

Я бы не заменил mac cp на GNU cp. Я бы тоже так не использовал, потому что это не кросс-платформенный. Вместо этого используйте кросс-платформенные инструменты, такие как rsync:

rsync <srcDir/srcFile> <dst>

Результат: dst/srcDir/srcFile