OpenClawのTTSで生成されたMP3は、通常次の場所に保存されます。
/root/.openclaw/media/tool-speech-synthesis/ただし、この場所はOpenClawのメンテナンス処理で古いファイルが削除される可能性があります。そこで、MP3を /root/mp3 へ自動コピーする監視スクリプトを用意しました。
監視スクリプト
#!/usr/bin/env bash
set -u
src=/root/.openclaw/media/tool-speech-synthesis
dst=/root/mp3
mkdir -p "$dst"
while true; do
if [ -d "$src" ]; then
find "$src" -maxdepth 1 -type f -name '*.mp3' -print0 |
while IFS= read -r -d '' file; do
base=${file##*/}
id=${base#voice---}
id=${id%.mp3}
day=$(date -r "$file" +%F)
out="$dst/${day}_voice-${id}.mp3"
[ -e "$out" ] || cp -- "$file" "$out"
done
fi
sleep 20
done
動作
20秒ごとにTTS保存先を確認し、新しいMP3を次の形式でコピーします。
2026-09-22_voice-d88e5223-68e0-44a5-832d-7f16689e7eaf.mp3同名ファイルが存在する場合は、上書きせずスキップします。
スクリプト自体の解説
1. Bashで実行することを指定
環境にあるBashを使って実行します。
2. 未定義変数をエラーにする
set -u存在しない変数を使った場合に停止し、予期しない動作を防ぎます。
3. コピー元と保存先を指定
src=/root/.openclaw/media/tool-speech-synthesis
dst=/root/mp3
mkdir -p "$dst"src:OpenClawがTTS MP3を保存する場所dst:長期保存用の場所mkdir -p:保存先がなければ作成
4. 常駐ループ
while true; doスクリプトを終了するまで、繰り返し監視します。
5. MP3ファイルを検索
find "$src" -maxdepth 1 -type f -name '*.mp3' -print0コピー元の直下にあるMP3だけを検索します。-print0により、空白を含むファイル名にも対応しています。
6. ファイルを1件ずつ処理
while IFS= read -r -d '' file; do検索結果を1ファイルずつ安全に読み込みます。
7. ファイル名から音声IDを取得
base=${file##*/}
id=${base#voice---}
id=${id%.mp3}例えば、
voice---abc123.mp3から、
abc123だけを取り出します。
8. 日付付きファイル名を作成
day=$(date -r "$file" +%F)
out="$dst/${day}_voice-${id}.mp3"ファイルの更新日を使って、次の名前を作ります。
2026-09-22_voice-abc123.mp39. 重複コピーを防止
[ -e "$out" ] || cp -- "$file" "$out"保存先に同じファイルがあればスキップし、存在しない場合だけコピーします。既存ファイルは上書きしません。
10. 20秒待機
sleep 2020秒ごとに新しいMP3がないか確認します。
11. 監視を繰り返す
done
done内側のdoneはファイル処理、外側のdoneは常駐監視ループの終了位置です。
このスクリプトは、OpenClawの一時保存領域を20秒ごとに確認し、新しいMP3だけを /root/mp3 に退避する仕組みです。
systemdによる常駐
systemdサービスに登録すると、サーバ起動後も自動的に監視を再開できます。
sudo systemctl daemon-reload
sudo systemctl enable --now openclaw-mp3-archive.service状態確認:
sudo systemctl status openclaw-mp3-archive.serviceなお、現在は記事タイトルを取得する仕組みがないため、ファイル名は日付+音声IDです。記事タイトルを付けるには、記事情報をTTS生成処理と連携させる追加実装が必要です。
