按照命名模式删除AEM 6.3中的多个页面

时间:2019-08-27 17:52:25

标签: aem

在AEM内容层次结构中,我有一个文件夹,其中有4000页。在这些页面中,有3700个页面遵循xyz-1,xyz-2,xyz-3..uptill xyz-3700的命名约定。我需要删除以xyz开头的这些页面,但不能删除其他300个具有不同名称的页面。我已经尝试在下面的命令中使用*,但这是行不通的。有人可以帮我解决这个问题吗?

curl -F“:operation = delete” -F“:applyTo = / content / foo / bar / xyz *” http://localhost:4502 -u admin:admin

1 个答案:

答案 0 :(得分:2)

Curl需要完整的路径来执行该语句。您可以像下面这样传递单个路径,但是由于页面很多,它不能解决您的问题

curl -u admin:admin -F":operation=delete" -F":applyTo=/content/aem-flash/en/xyz-1" -F":applyTo=/content/aem-flash/en/xyz-2" http://localhost:4502

您必须编写一个脚本来删除所有这些脚本。有多种选择,您可以编写独立代码并成束部署,也可以从Eclipse连接

如果您不想部署捆绑软件,则可以使用groovy脚本执行代码。

如果所有页面都在同一个父节点中,则下面的Groovy脚本应该可以满足您的要求。如果您要查询整个网站,请相应地更新查询

import javax.jcr.Node

def buildQuery(page) {
    def queryManager = session.workspace.queryManager;
    def statement = 'select * from cq:Page where jcr:path like \''+page.path+'/xyz-%\'';
    queryManager.createQuery(statement, 'sql');
}

final def page = getPage('/content/aem-flash/en/')
final def query = buildQuery(page);
final def result = query.execute()

result.nodes.each { node ->
println 'node path is: ' + node.path
node.remove();
session.save();
}


  

CURL解决方案

我发现了单独使用CURL命令的另一种方法,但它向服务器发送了多个请求,可能不是很好。

以下命令即使在环境中不存在记录的情况下,也会发出4000个请求,就像一个循环一样。

由于Windows默认情况下不支持正则表达式,因此在命令提示符下将不起作用。它在Linux环境中应该可以正常工作。如果要在Windows中执行此操作,可以使用Git bash控制台或其他工具。我已经在Git Bash中尝试过,并且效果很好。

curl -X DELETE "http://localhost:4502/content/aem-flash/en/xyz-[0-4000]" -u admin:admin