在 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/