寻求解决方案:文件触发脚本运行

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
jiandan23
帖子: 76
注册时间: 2010-12-17 22:31
系统: Mint 19.2
送出感谢: 6 次
接收感谢: 2 次

寻求解决方案:文件触发脚本运行

#1

帖子 jiandan23 » 2022-12-08 20:06

Hello,All!
我有这样一个需求待实现:将某个文件拷贝到指定目录时,会触发某个脚本运行。

具体如下:
/trans目录下存在一些文件夹,比如flac2mp3,mkv2mp4
/trans
|------mkv2mp4
|------flac2mp3
当我把*.mkv文件拷贝到/format/mkv2mp4下时,让Linux自动调用mkv2mp4.sh脚本,进行格式转换:*.mkv -> *.mp4.
当我把*.flac文件拷贝到/format/flac2mp3下时,让Linux自动调用flac2mp3.sh脚本,进行格式转换:*.flac -> *.mp3.

目前解决方案:
通过systemd编写trans.path和trans.service实现

trans.path用于监控/trans/mkv2mp4/*.mp4和/trans/flac2mp3/*.flac
PathExistsGlob=/trans/mkv2mp4/*.mkv
PathExistsGlob=/trans/flac2mp3/*.flac

当以上两个目录中出现相应后缀文件时,systemd会自动启动trans.service。
trans.service会启动trans.sh脚本,trans.sh脚本中再调用mkv2mp4.sh/flac2mp3.sh进行转换

该解决方案存在的问题:
我先拷贝一个文件过去,转换开始,一切正常。这时,如果在前面一个文件还没转换完成时 ,我又拷贝了一个文件,这个后拷贝的文件不会再触发trans.service执行了,因为trans.service已经在running了。

希望得到的帮助:
有没有办法解决我现在这个方案中的问题。
或者,实现我这个需求有没有更好的方案。
头像
lilydjwg
论坛版主
帖子: 4245
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 12 次
接收感谢: 136 次
联系:

Re: 寻求解决方案:文件触发脚本运行

#2

帖子 lilydjwg » 2022-12-08 21:40

建议用 inotifywait 或者 entr 或者 watchexec 或者 incron 来处理这个任务。
回复