...
Warning | ||
---|---|---|
| ||
Always be careful updating storage format data and make sure you test before doing mass updates. |
Tip | ||
---|---|---|
| ||
Starting with Release 6.4, getPageList can now list pages whose body content matches a regex pattern. This provides an option for finding specific content source that is not amenable to normal Confluence searching via indexing. |
Links
...
This site has many pages created via automation, often by a Bamboo build process. Confluence has an annoying feature that converts simple wiki text like @entry@ into XHTLM reference to a template variable. There doesn't seem to be a way to escape this behavior. The result is a number of pages with incorrect data. This examples shows how this was corrected.
...
- Identify the problem - usually, someone notices a problem on a specific page when viewing the page
- Setup an example page for testing
- Find all content with the problem. You need to have a unique way to identify the text that is in error without finding extraneous text. This can be difficult in some cases.
- Look at the storage view of the page with the problem
- In this example: <at:var at:name="entry" /> should have been @entry@
- In the UI, search for something like: "<at:var" and verify that the pages found represent the problem you are trying to solve
Construct the same search using the CLI and verify results. Suggest you start with a single space first before doing @all. Note you need to escape the double quote using your system specific escaping syntax - see Tips
No Format --action getContentList --search "\"<at:var\"" --space @all
Construct a find/replace string. In this case, the text between the @ signs could be anything, so we will use findReplaceRegex instead of simple text replacement that findReplace does. You need to know a little bit of regex syntax including a find group (in this example: any number of alphabetic characters) and the replacement text referencing the find group: @$1@. Test your regex first. How to use regular expressions has some pointers.
No Format <at:var at:name="([a-zA-Z]*)" /> needs to be replace with @$1@
- Now construct the CLI command to make a single page fix.
- Yuk ! XHTML has a bunch of characters that are considered special characters for the CLI, regex processing, and/or command line processing. Tips has some rules for escaping some of the CLI related areas, but it is still a pain especially with differences between Windows and non-Windows systems.
Construct the parameters for find and replace. Use ~ instead of " so we can avoid escaping double quote. Use # as the separator between key and value instead of the default : (colon). For unix based command lines, the $ must be escaped.
No Format --findReplaceRegex "<at:var at:name=~([a-zA-Z]*)~ />#@\$1@" --special " # ~"
Construct the CLI command for a single action and test on a single page
No Format --action modifyPage --space xxx --title "my title" --findReplaceRegex "<at:var at:name=~([a-zA-Z]*)~ />#@\$1@" --special " # ~"
- Global change
Put every thing together using runFromContentList (this examples using unix based escaping)
No Format --action runFromContentList --search "\"<at:var\"" --space @all --common "--action modifyPage --id @pageId@ --findReplaceRegex \"<at:var at:name=~([a-zA-Z]*)~ />#@\$1@\" --special \" # ~\" "
Result
No Format Run: --action modifyPage --id 28901397 --findReplaceRegex "<at:var at:name=~([a-zA-Z]*)~ />#@$1@" --special " # ~" Page modified: '3.0.0 - Documentation' in space: BCLI. Page has id: 28901397 Run: --action modifyPage --id 28901413 --findReplaceRegex "<at:var at:name=~([a-zA-Z]*)~ />#@$1@" --special " # ~" Page modified: '3.0.0 - Documentation' in space: CSOAP. Page has id: 28901413 ...
...