我们有一个运行 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