在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
答案 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