Groovy 语法不适用于反斜杠

Groovy 语法不适用于反斜杠

我正在尝试在 Groovy 语法中的以下命令中使用反斜杠:

find /path/folder-* -type f -iname "file*" -exec rm -f {} \;

当我尝试在 Jenkins 管道上构建此命令时,出现有关此语法的错误。甚至在我执行此命令之前,Jenkins 表单字段上就出现带有红色语法的警告,提示“意外字符:'\'”。

我该如何替换或修复这个反斜杠的错误?

Groovy 命令:

node ("instance") {
    stage ("cleaning folders"){
        sh '''        
        find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \;
        '''
    }
    stage ("instance1"){
        sh '''
        rm -f /root/logfiles/instance1/*
        echo instance1; 
        scp 100.0.0.50:/var/log/file1.log /root/logfiles/instance1/file1.log;
        scp 100.0.0.50:/var/log/file2.log /root/logfiles/instance1/file2.log;
        '''
    }
    stage ("instance1"){
        sh '''
        rm -f /root/logfiles/instance2/*
        echo instance2; 
        scp 100.0.0.51:/var/log/file1.log /root/logfiles/instance2/file1.log;
        scp 100.0.0.51:/var/log/file2.log /root/logfiles/instance2/file2.log;
        '''
    }
}

注意:rm -f目前已为所有实例。将全部替换rm -ffind舞台清理文件夹的命令。

提前致谢

答案1

转义转义字符可能会有所帮助,尽管这听起来很有趣。只需在反斜杠前面再加一个反斜杠即可:

stage ("cleaning folders"){
    sh '''        
    find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \\;
    '''
}

至少 IntelliJ 没有将其标记为语法错误。

答案2

实际上,就您而言,我甚至懒得去弄清楚正确的转义方法:

stage ("cleaning folders"){
    sh '''        
    find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} +
    '''
}

当您将分号传递给 时-exec,find 会构造多个命令,每个命令对应 find 操作的每个结果(例如rm -f /root/logfiles/instance/file1.logrm -f /root/logfiles/instance/file2.log、...),但是当您使用加号时,find 会构造一个带有多个参数的单个命令,这更加高效和快速(例如rm -f /root/logfiles/instance/file1.log /root/logfiles/instance/file2.log ...)。有关更多详细信息,请参阅 find 的手册页(抱歉,我现在无法引用手册页或提供更多详细信息;我在使用手机)。

答案3

一个解决方案是使用美元斜线,它会禁用字符串插值并将转义字符更改为$。

stage ("cleaning folders"){
    sh script: $/
    find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \;
    /$
}

答案4

完成这个特定任务的最佳方法find是使用它的-delete操作,这样也避免了在这种情况下使用反斜杠的需要:https://www.gnu.org/software/findutils/manual/html_mono/find.html#Using-the-_002ddelete-action

相关内容