在AEM内容层次结构中,我有一个文件夹,其中有4000页。在这些页面中,有3700页遵循xyz-1、xyz-2、xyz-3的命名约定,直至xyz-3700。我要求删除这些以xyz开头的页面,但不删除其他300个具有不同名称的页面。我用*尝试了下面的命令,但这不起作用。有人能帮我解决这个问题吗?
curl“-F":operation=delete”-F“:applyTo=/content/foo/-F/xyz*”http://localhost:4502 -u管理员:管理员
发布于 2019-08-28 09:24:25
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默认情况下不支持regex,因此这在命令提示符下不起作用。它应该可以在linux环境中很好地工作。如果你想让它在Windows中执行,你可以使用Git bash控制台或其他工具。我在Git Bash中尝试过,它工作得很好。
curl -X DELETE "http://localhost:4502/content/aem-flash/en/xyz-[0-4000]" -u admin:adminhttps://stackoverflow.com/questions/57679919
复制相似问题