Как мне использовать cp для повторного и правильного копирования одного каталога в новое имя? - PullRequest
0 голосов
/ 06 марта 2010

Я пишу make-файл. Однако, за исключением расширения пути и ограничений на то, что я могу сделать, это в основном вопрос сценариев оболочки. Как часть процесса make, я хочу скопировать каталог в место назначения. Мой исходный каталог и каталог назначения являются переменными, поэтому я не могу много о них говорить. Они могут быть полностью квалифицированы, они могут быть относительными.

Но я хочу скопировать каталог $ (A) в место назначения $ (B). $ (B) - это имя, которое я хочу, чтобы каталог имел в месте назначения, а не каталог, в который я хочу скопировать $ (A) (т.е. результирующее имя каталога будет $ (B), а не $ (A) / $ ( B)), это может быть один и тот же путь для source и dest, поэтому я проверяю с помощью ifneq ($ (A), $ (B)), прежде чем что-либо делать. Но вопрос в том, что мне делать в блоке.

Если я делаю

cp -r $(A) $(B)

это будет работать с первого раза. $ (A) копируется в $ (B). Но если правило сработает снова позже, оно создаст новую копию $ (A) внутри $ (B) (то есть $ (B) / $ (A)).

И прежде чем вы спросите, я бы предпочел не rm -r $(B), прежде чем делать это, если это вообще возможно.

Ответы [ 4 ]

3 голосов
/ 06 марта 2010

cp -r $ (A) / $ (B)

Добавление косой черты скопирует содержимое $ (A) в $ (B) и создаст $ (B), если он не существует.

1 голос
/ 06 марта 2010

Если вы используете GNU cp, вы можете сделать:

mkdir -p $(B)
cp -a --target-directory=$(B) $(A)

Вы также можете попробовать rsync:

rsync -a $(A) $(B)/
0 голосов
/ 07 марта 2010

Вместо cp используйте rsync

0 голосов
/ 06 марта 2010

как насчет использования cp -r $(A) $(B) в первый раз, затем используйте -u из copy для копирования только тогда, когда источник новее, чем пункт назначения ?? см. справочную страницу cp для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...