В теме это объясняется — по сути, у меня есть скрипт bash, используемый в системе Linux и системе Windows с Cygwin, где следующая команда работает отлично:
cp --parents
Однако запуск этой же команды на Mac в терминале приводит к следующей ошибке:
cp: illegal option -- -
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
Я использую команду в этом контексте, копируя выбранный список файлов в выходной каталог и сохраняя их структуру каталогов:
cp --parents foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file ~/my-output/
Что я могу сделать, чтобы добиться нужного cp --parents
поведения?
решение1
--parents
вероятно, это не-POSIX поведение, специфичное для GNU cp
, тогда как в производной от BSD cp
OS X его нет.
Вы, вероятно, можете получить желаемую функциональность, установив GNU cp
на свой Mac и используя его. Это, вероятно, часть пакета GNU, называемого fileutils
, и вы, вероятно, можете установить его с помощью Homebrew, MacPorts или Fink.
решение2
Мне удалось синтезировать эту команду на MAC, используя параметр Rsync -R для копирования относительной структуры каталогов копируемого файла.
Синтаксис:
rsync -R <list of files to copy> <target dir>
Использование:
rsync -R foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file ~/my-output/
Это дает тот же результат, хотя я уверен, что, вероятно, есть некоторые дополнительные накладные расходы из-за использования RSYNC вместо CP.
решение3
У вас есть basename
? Если да:
$ for i in `ls foo/gen1.file foo/bar/gen2.file foo/gen3.bar bar/foo/bar.file`; do cp $i ~/my-output/`basename $i`; done