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}