当家庭成员开始在 Ubuntu 上使用 Libreoffice Writer 时,他们会反复使用某个文档作为新文档的起点。随后,这些文档本身又被反复用作更多文档的起点。不幸的是,家庭成员不知道这些文档的“标题”字段。
最终结果是,现在他们有数百份文档的“标题”字段都含有虚假内容,全部一样。只不过,在他们了解到这一点后,他们开始修复标题字段,因此并非每份文档都存在此问题。只有大多数文档存在此问题。
是否有命令行/批处理/终端方式来
- 选择有问题的文件
- 删除标题字段
由于文件太多,逐一进行处理是不切实际的。
搜索 ask.libreoffice.org 没有得到答案。
答案1
这个脚本(这个版本)似乎可以做到这一点。
#!/bin/bash
#
# Last updated: "Sun Jul 29 23:43:59 2018"
#
# Replace "Unwanted content" with "Desired Stuff" in the document's "Title" (File->Properties->Title)
# **WARNING** Leaves original unmodified "<file>" in "<file>~". Overwrites previous "<file>~"
# modified to remember the contents of the zip archive, and zip
# every one back together
if [[ "$1" = "-d" ]] ; then
set -x
shift
fi
while [[ "$1" ]] ; do
file="$1"
shift
contents=$(unzip -l "$file" | tail -n +4 | awk '{print $4}' | tr "\n" " ")
dirs=$(unzip -l "$file" | tail -n +4 | awk '{print $4}' | grep / | cut -d/ -f1 | uniq)
unzip -qq "$file"
sed -e 's/dc:title>Unwanted content/dc:title>Desired stuff/' meta.xml >meta.xml.new
mv -f meta.xml.new meta.xml
mv -f "$file" "${file}~"
zip --quiet -o "$file" -r $contents
rm -r $contents $dirs
cmp --quiet "$file" "${file}~"
if [[ $? -eq 0 ]] ; then
mv -f "${file}~" "$file"
fi
done
制作名为可执行文件的脚本FixMyTitle
并将其存储在您的目录中$PATH
。$HOME/bin
这样就好了。
然后,使用find
(读取man find
)将文件的名称传递给FixMyTitle
:
find $HOME -type f -name '*.odt' -print0 | \
xargs -0 FixMyTitle
稍后,通过以下方式清理过时的原件:
find $HOME -type f -iname '*.odt~' -delete