rsync检测到文件时运行其他命令

时间:2013-12-26 19:18:11

标签: linux bash rsync

我目前正在运行以下脚本来自动备份我的音乐:

#!/bin/bash

while :; do
    rsync -ruv /mnt/hdd1/Music/ /mnt/hdd2/Music/
done

每当将新文件添加到我的音乐文件夹时,rsync都会检测到该文件,并将其复制到我的其他磁盘。这个脚本运行正常,但我还想将检测到的文件转换为ogg opus文件,以便放在我的手机上。

我的问题是:如何对rsync -u找到的新文件运行命令?

我也会接受完全不同的答案,但结果相同。

1 个答案:

答案 0 :(得分:2)

rsync -ruv  /mnt/hdd1/Music /mnt/hdd2/ | sed -n 's|^Music/||p' >~/filelist.tmp
while IFS= read filename
do
    [ -f "$filename" ] || continue
    # do something with file
    echo "Now processing '$filename'"
done <~/filelist.tmp

使用-v选项,rsync打印它复制到stdout的文件的名称。我使用sed将文件名(不包括信息性消息)捕获到文件中。可以在以后随意处理该文件中的文件名。

上面sed的方法取决于rsync显示从源目录的最后部分开始的文件名,例如:我上面的例子中的“音乐/”,假设你不需要它就会被删除。或者,可以尝试使用明确的方法来排除噪声消息。