19

У меня есть каталог, который содержит кучу других папок, содержащих файлы CoffeeScript/ JavaScript. Я могу скомпилировать файлы CoffeeScript в новую папку с той же структурой папок.

Я хочу рекурсивно скопировать все файлы * .js из исходной папки в папку назначения. Я также не хочу перезаписывать файлы, которые уже присутствуют в папке назначения. Есть мысли о том, как этого добиться?

Я попытался использовать cp -n source/**.js desination/ и cp -Rn source/**.js desination/ после просмотра другого подобного вопроса, но, похоже, он не работает.

Есть идеи, как этого добиться?

3 ответа3

19

Вы можете использовать rsync (он также делает локальное копирование)

rsync -r --ignore-existing --include=*/ --include=*.js --exclude=* source/ destination
  • -r зайти в каталоги,
  • --ignore-existing чтобы игнорировать существующие файлы в месте назначения,
  • Фильтры include и exclude означают: включить все каталоги, включить все файлы * .js, исключить остальные; первое включение необходимо, иначе окончательное исключение также исключит каталоги до того, как их содержимое будет проверено.

Наконец, вы можете добавить -P если вы хотите наблюдать за прогрессом, - --list-only если вы хотите увидеть, что он будет копировать без фактического копирования, и -t если вы хотите сохранить метки времени.


Это не связано, но я недавно узнал команду rsync, когда переместил 15-летние документы из одного раздела в другой. Уверенный, что мои файлы были там, я тогда стер старый раздел и поместил туда другие вещи; Позже я понял, что потерял все метки времени, и обнаружил флаг -t. Просто хотел поделиться своим несчастьем:'(

5

Это также достижимо с помощью cp. Посмотреть здесь:

sudo cp -vnpr /xxx/* /yyy

ххх = источник

гггг = пункт назначения

v = многословный

n = нет клоббера (без перезаписи)

p = сохранить права

r = рекурсивный

5

Глядя на страницы руководства, кажется, что вам нужна опция -n .

-n, --no-clobber
   do not overwrite an existing file (overrides the previous -i option)

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