PowerPoint for Macのノートを一括削除するシェルスクリプト
はじめに
PowerPointのプレゼンテーションファイル(*.pptx)には、各スライドにノートを追加することができる。 ただ、このノートを一括で削除する機能はMac版のPowerPoint本体には備わっていない(はず)。 今回は、シェルスクリプトを用いてこのノート削除を自動化してみる。
シェルスクリプトの説明
このシェルスクリプト(delete_note.sh
)は、以下のような処理を行う。
-
一時ディレクトリを作成し、そのパスを
TMP_DIR
変数に格納する。 -
カレントディレクトリ内の全てのpptxファイルに対して、以下の処理を行う。
.pptx
ファイルを一時ディレクトリにコピーする。- 一時ディレクトリ内で
.pptx
ファイルを解凍する。 ./ppt/notesSlides/
ディレクトリ内の全ての.xml
ファイルに対して、`<a:t>タグの内容を空にする。- 解凍したファイルを再度
.pptx
ファイルにまとめる。 - 生成された
.pptx
ファイルを元のディレクトリにコピーする。
-
一時ディレクトリを削除する。
シェルスクリプト
#!/bin/bash
set -eu
TMP_DIR="$(mktemp -d)"
trap 'rm -rf $TMP_DIR' EXIT
for PPTX_FILE in *.pptx; do
if [ -e "$PPTX_FILE" ]; then
echo "Processing $PPTX_FILE..."
cp "$PPTX_FILE" "$TMP_DIR"
pushd "$TMP_DIR"
unzip "$PPTX_FILE"
rm "$PPTX_FILE"
find "./ppt/notesSlides/"*.xml | xargs -I{} sed -i '' -e 's/<a:t>[^<]*<\/a:t>/<a:t><\/a:t>/g' "{}"
zip -0 -r "$PPTX_FILE" ./* # do not compress (-0)
popd
cp "$TMP_DIR/$PPTX_FILE" "$PPTX_FILE"
fi
done
前提:PPTXファイルの構造
PPTXファイルは、実際にはXMLファイルの集合体である。 具体的には、以下のような構造になっている。
_rels/
: リレーションシップを定義するXMLファイルを格納するディレクトリ。docProps/
: ドキュメントのプロパティを定義するXMLファイルを格納するディレクトリ。pptx
プレゼンテーションの本体を構成するXMLファイルを格納するディレクトリ。slides/
: 各スライドの情報を格納するXMLファイルを格納するディレクトリ。slideMasters/
: スライドマスターの情報を格納するXMLファイルを格納するディレクトリ。notesMasters/
: ノートマスターの情報を格納するXMLファイルを格納するディレクトリ。notesSlides/
: 各スライドのノートの情報を格納するXMLファイルを格納するディレクトリ。theme/
: テーマの情報を格納するXMLファイルを格納するディレクトリ。
_rels/
: リレーションシップを定義するXMLファイルを格納するディレクトリ。[Content_Types].xml
: コンテンツタイプを定義するXMLファイル。
これらのXMLファイルが圧縮されたものが、PPTXファイルとなる。 つまり、PPTXファイルを編集するには、一度解凍してXMLファイルを修正し、再度圧縮する必要がある。この構造が知っていないとMac版のPPTを運用していく際は詰む。
関連しているかもしれない記事