linux: поиск общих файлов из двух каталогов с помощью одной команды - PullRequest
0 голосов
/ 12 апреля 2020

Dir1: [anyName]-test/target/surefire-reports/*.xml

Dir2: target/surefire-reports/*.xml

jenkins shell cmd я пришел:

sh "jar -cMvf  Test.zip target/surefire-reports/*.xml *-test/target/surefire-reports/*.xml "

существует только один каталог (dir1 или dir2) , таким образом, шаг оболочки всегда завершается неудачей для файлов или каталогов.

Есть ли лучшая идея для поиска файлов xml в одной команде, без сбоев? (может быть какое-то регулярное выражение) Спасибо!

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

С GNU find:

find . -type f -regex '\./\([^/]*-test/\)?target/surefire-reports/[^/]*\.xml'\
  -exec jar -cMvf Test.zip {} +

Действие -regex соответствует пути ваших обычных (type -f) файлов. Это добавит только файлы *.xml из каталогов surefire-reports, но не из его подкаталогов. Если вы хотите включить подкаталоги, замените [^/]*\.xml на .*\.xml.


Альтернатива с использованием шаблонов глобуса:

find target/surefire-reports *-test/target/surefire-reports -maxdepth 1 -type f\
  -name '*.xml' -exec jar -cMvf Test.zip {} +

Если вы хотите включить подкаталоги, удалите -maxdepth 1 .

Запустите обе команды из родительского каталога target (каталог вашего проекта).

1 голос
/ 12 апреля 2020

Попробуйте:

cd <TOP DIRECTORY>
find . -type f -name "*unitTest.xml" -print | xargs jar -cMvf Test.zip

Я поставил "* unitTest. xml, поскольку в Dir2 J в заглавных буквах. Таким образом, он будет захватывать файлы JUnitTtest. xml, только если они существуют. .

Таким образом, результаты команды find используются в качестве аргументов команды jar. Это делается xargs. find не заботится о том, существует ли файл или нет, поэтому без ошибок.

Проверено на bash.

...