Ответ 1
Вы можете использовать команду ditto
в Mac OS X:
Основная форма
ditto <src-path> <dst-path>
делает то, что вы хотите. Там еще много вариантов - просмотрите справочную страницу.
В 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, создавая любые отсутствующие промежуточные каталоги.
Вы можете использовать команду ditto
в Mac OS X:
Основная форма
ditto <src-path> <dst-path>
делает то, что вы хотите. Там еще много вариантов - просмотрите справочную страницу.
Это меня очень беспокоило. Обходным путем для этого может быть использование rsync.
rsync -R test/withintest/go.rb test2
имеет тот же эффект, что и cp --parents
, а OS X поставляется с стандартом rsync.
Вы можете установить версию 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"
Я бы не заменил mac cp на GNU cp. Я бы тоже так не использовал, потому что это не кросс-платформенный. Вместо этого используйте кросс-платформенные инструменты, такие как rsync:
rsync <srcDir/srcFile> <dst>
Результат: dst/srcDir/srcFile