将通话记录归档到日期文件夹的脚本

将通话记录归档到日期文件夹的脚本

我们有一个运行 Asterisk 的 IP PBX,制造商将其设置为在一定时间段后删除通话录音。我使用 rsync 将这些备份到 Ubuntu 服务器,以便我们能够无限期地存储它们。

我遇到的问题是所有录音都放在一个目录中。方便的是,文件以相同的结构命名:

年.月.日.时.分.秒-呼叫参考号-分机号.wav

我想要做的是建立一个目录结构,即年/月/日(月份正确排序),然后将每个文件移动到相应的顺序。

个人说明:我对在命令行上使用 Ubuntu 很有信心,但没有运行或自动化脚本的经验,因此非常欢迎提出建议。(乐于学习!)提前致谢。


之前提供的脚本运行良好。我又遇到了一个小问题。

我正在使用 crontab 将 IPPBX rsync 到 Ubuntu 服务器,然后使用下面的脚本将这些录音归档。每天晚上,rsync 都会重新下载所有录音,因为它认为目标文件夹是空的。

我有两个问题:是否可以将 rsync 合并到下面的脚本中,以便使用单个文件?脚本是否可以理解已下载的内容,以便仅下载新文件?

答案1

使用 bash 确实相当简单。只需迭代文件,提取年、月、日,然后相应地移动即可。

#!/usr/bin/env bash

# iterate all the wav-files that has at least 3 dots in addition to the extension
for file in *.*.*.*.wav; do

    # In the case of no files matching the glob, file will contain the glob itself
    # which will make the mkdir later on create './*/*/*'. Avoid that by testing
    # if file contains an existing file.
    [[ -e $file ]] || continue

    # split out year month and day from the filename
    IFS=. read -r year month day _ <<< "$file"

    # make sure the directories exist, then move it
    mkdir -p "./$year/$month/$day" &&
    mv "./$file" "./$year/$month/$day"
done

相关内容