aem - 按照命名模式在 AEM 6.3 中删除多个页面

标签 aem

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

curl -F":操作=删除"-F":applyTo=/content/foo/bar/xyz*"http://localhost:4502 -u 管理员:管理员

最佳答案

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

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

如果您不想部署 bundle ,可以使用 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();
}


Solution with 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

关于aem - 按照命名模式在 AEM 6.3 中删除多个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57679919/

相关文章:

html - 取消设置 td 填充

aem - 来自 AEM 的计划页面报告

servlets - 从 Sling/CQ 中的 bundle 获取 OSGi 服务

adobe - Adobe 的文件库工具 (VLT) 是否可以配置为忽略文件?

aem - 如何从自定义多字段组件中获取值?

Adobe cq5 查询生成器 - 获取日期范围内的多个属性

java - ADOBE CQ 5.5 反向复制(发布者 -> 作者)由代码触发,但根本不运行

aem - 从页面树中捕获 AEM 包中的单个页面

aem - 限制 cq5 模板中允许的组件

java - JCR SQL2 查询 : binding of ISDESCENDANTNODE param