2

Тема объясняет это - в основном у меня есть скрипт 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 ?

3 ответа3

1

Мне удалось синтезировать эту команду на 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, возможно, добавлены некоторые накладные расходы.

0

--parents - это, вероятно, поведение, отличное от POSIX, характерное для GNU cp , в то время как производное от BSD cp в OS X его не имеет.

Вы, вероятно, можете получить желаемую функциональность, установив GNU cp на свой Mac и используя его. Вероятно, это часть пакета GNU, называемого fileutils , и вы можете установить его с помощью Homebrew, MacPorts или Fink.

0

У вас есть 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .