jfrog скопировать каталог в другой каталог

С jfrog-cli Я хочу скопировать "tags/$version" в "released/$version"

$version есть подкаталоги, которые мне нужно сохранить в соответствующем формате.

Я старался:

jfrog rt cp --flat=false repo/tags/$version/* repo/released/

Что я получаю это:

repo/released/tags/$version

Кто-нибудь может помочь?

4 ответа

Artifactory cp / mv - ЗАДАЧА ... он не работает как обычная команда перемещения или копирования файловой системы.

Следующие шаги перемещают (в том же репозитории) все, включая подпапки, из test / example / libraries / 1.0.0 в test / example / libraries / 2.0.0 .

jfrog rt mv release-local/test/example/libraries/1.0.0 release-local/2.0.0 --user ${userid} --password ${userpwd} --url https://artifactory

Перед

      /test
  /example
    /libraries
       /1.0.0
          file1.dll
          /folder1
             file2.dll

После

      /test
  /example
    /libraries
       /2.0.0
          file1.dll
          /folder1
             file2.dll

Похоже, что команда берет последний элемент пути к цели и заменяет его полным путем исходного репозитория за вычетом последнего элемента пути ... в основном это похоже на переименование файла, которое включает путь как часть переименовать. Обратите внимание, что вам не нужно использовать для этого рекурсивный или плоский флаг.

В последнем выпуске JFrog CLI (версия 1.23.1) команда для копирования файлов из одного хранилища в другое должна быть похожа на ту, что у вас есть.

Например, если я хочу скопировать все версии из репозитория libs-snapshot-local/ и путь org/jfrog/test/ в хранилище под названием generic-local Я могу выполнить команду

jfrog rt cp libs-snapshot-local/org/jfrog/test/ generic-local/

По умолчанию он будет рекурсивно копировать все элементы libs-snapshot-local/org/jfrog/test/ в их новом месте в generic-local

      jfrog rt cp --flat=true --recursive=false repo/tags/($version/**) repo/released/{1}

или

      jfrog rt cp --flat=true --recursive=false repo/tags/$version/(**) repo/released/$version/{1}

Даже не пытайтесь заставить это работать с (по умолчанию)--recursive=trueфлаг. Мне еще предстоит найти случай, когда этот флаг делает что-то «полезное», взаимодействие со всеми другими возможными флагами еще не доработано.

Любое наивное решение с--flat=true в одиночку также потерпит неудачу, если вам придется иметь дело с подкаталогами.

Используйте стиль Ant**рекурсивно выполнить подстановку, а затем использовать синтаксис замены шаблона для восстановления группы захвата, создавая правильный, полностью определенный целевой путь.

TLDR (что сработало для меня):jfrog rt cp --flat=true --recursive=true repo/tags/$version/(*) repo/released/$version/{1}

ТАК

Я работал над этим некоторое время, и все эти решения имели для меня определенный успех.

Для справки: текущая версия JFrog Artifactory, которую я использую, — Enterprise 7.59.11 rev 7591190.

Решение, которое дало мне больше всего успеха, заключалось в использовании функции копирования glob в стиле ant.

Подстановочные знаки в стиле муравья :

?соответствует одному символу

соответствует нулю или более символам

**соответствует нулю или более «каталогам» в пути

Я обнаружил, что стиль муравья(**)и сопоставление {1} с подстановочными знаками приведет к следующей структуре:

бывший.jfrog rt cp --flat=true --recursive=false repo1/test/example/libraries/1.0.0/(**) repo2/2.0.0/{1}

обратите внимание, что каждая сущность в совпадении с подстановочными знаками была создана сама по себе, включая каталоги

Я не уверен, почему это так, но мне помогли следующие настройки:

  • *подстановочный знак, ноль или более символов

  • квартира = истина

  • рекурсивный = истина

jfrog rt cp --flat=true --recursive=**true** repo/tags/$version/**(*)** repo/released/$version/{1}

Другие вопросы по тегам