Linux команда для удаления каталога, кроме указанного c ошибка каталога в сценарии оболочки конвейера - PullRequest
0 голосов
/ 24 апреля 2020

В /home/oracle/jenkins/workspace/test/ месте, у меня есть несколько каталогов. Я хочу удалить все каталоги, кроме test1, которые я получаю, используя следующее из терминала -

rm -rf /home/oracle/jenkins/workspace/test/!("test1")

То же самое я хочу добиться через конвейер Jenkins, поэтому написал метод -

def cleanWorkspaceDir() {
    echo "Cleaning workspace"
    sh '''rm -rf /home/oracle/jenkins/workspace/test/!("test1")
    '''
}

Но это выдает ошибку - /home/oracle/jenkins/workspace/RedmineAndReviewboardProject/SVNCheckout@tmp/durable-810bac2b/script.sh: line 1: syntax error near unexpected token ('`

Не могли бы вы помочь, как я могу решить эту проблему?

1 Ответ

0 голосов
/ 24 апреля 2020

Вы можете попробовать следующее:

def cleanWorkspaceDir() {
    echo "Cleaning workspace"
    sh '''find test/ -mindepth 1 '!' -name test1 -type d -exec rm -rf '{}' +
    '''
}

pipeline {
   agent { label 'slave' }

   stages {
      stage('Hello') {
         steps {
            sh 'mkdir -p test/{a/{p,q},b,c/{r,s},test1,test2}'
            sh 'ls -lR'
            cleanWorkspaceDir()
         }
      }
   }
}

Заменить приведенную выше команду find любой из следующих:

find /home/oracle/jenkins/workspace/test/ -mindepth 1 -type d -not -name test1 -delete

find /home/oracle/jenkins/workspace/test/ -mindepth 1 ! -name 'test1' -type d -exec rm -rf {} +
...