我有一个应用程序(视频流捕获),它不断将其数据写入单个文件。应用程序通常运行几个小时,创建〜1 GB的文件。退出后很快(几秒钟内),我想要写一份正在写的2份文件 - 比方说,/mnt/disk1
中的一份,/mnt/disk2
中的另一份(后者是一份)带有FAT32文件系统的USB闪存盘。)
我真的不喜欢将应用程序修改为同时写2份副本的想法,所以我想:
/mnt/disk1/file.mkv
)/mnt/disk1/file.mkv
中已存在的内容复制到/mnt/disk2/file.mkv
tail -f
的方式继续关注书面文件,将其从/mnt/disk1/file.mkv
复制到/mnt/disk2/file.mkv
rsync /mnt/disk1/file.mkv /mnt/disk2/file.mkv
只是为了确保它们是相同的。如果它们是相同的,它应该只是快速检查并很快退出。同步2个文件的最佳方法是什么,最好使用简单的Linux shell可用实用程序?也许我可以使用FUSE / md device / tee
/ tail -f
的一些巧妙技巧?
我案例的最佳解决方案似乎是
mencoder ... -o >(
tee /mnt/disk1/file.mkv |
tee /mnt/disk2/file.mkv |
mplayer -
)
这个使用名为“进程替换”的特定于bash / zsh的魔法,因此无需使用mkfifo
手动创建命名管道,并显示正在编码的内容,作为奖励:)
答案 0 :(得分:4)
嗯...这个文件在写入时是不可用的,所以为什么不通过管道/ fifo“欺骗”你的程序写入并使用第二个非常简单的程序创建2个副本? / p>
这样,您可以在原始流程结束后立即获得两份副本。
答案 1 :(得分:-1)
阅读tee(1)
上的手册页。