我一直疯狂地试图弄清楚这一点。
inotifywait -m -r -e close_write --format '%?' folder
我如何获取触发此事件的特定文件并重命名然后移动它,或者移动并重命名它?重命名的意思是将空格替换为非字母数字字符,例如下划线、破折号等。可接受的替代方法是在文件名前面或后面添加一个对我而言唯一的标识符,以便我在处理后将它们分类到特定的文件夹中。具体来说,电影将最终放在电影文件夹中,等等。
我已经完成了整个处理工作,但不具备实现我的目标的技能。
不一定非得这样inotifywait
,我对几乎任何事情(Windows 除外)都持开放态度,只要我可以用一些 shell 脚本来实现。
它能搜索上次修改时间为 n 秒的文件吗?如果可以,请在休眠 30 秒后检查同一文件以确保其未发生更改,然后对其采取行动?我需要一种方法来将已完成的文件与尚未完成下载的文件区分开来。
如能得到任何帮助我将非常感激。
答案1
好吧,由于时间问题并不重要,我将整个过程设置为 cron 作业,mmin +1
每小时查找一分钟前修改过的文件,当我再次检查时,我的文件没有被移动,并且我的终端上显示“没有这样的文件或目录”消息。我想rename
不是递归的。
经过几个小时的谷歌搜索,我找到了这个页面:在 Linux 中查找文件然后 cd 到该目录。
现在从我的新视频文件夹开始
cd -- "$(find ./ -name "*S0*" -type f -printf '%h' -quit)"
find ./ -type f -mmin +1 -exec rename 's/\ /\%/g' {} \;
mv -t /home/terry/Video_Processing/staging "*%*"
在 cron 中设置将所有完成的文件移动到暂存区,留下一个仍在下载的文件以供下次下载。
答案2
休息了一段时间后,我决定再次尝试我最初的计划,即使用它inotifywait
来触发重命名/移动/转换过程。很明显,文件必须在 60 秒以上之前创建才能mmin
捕获文件,所以首先触发,然后是 61 秒的休眠,然后启动重命名。
我使用 是iwatch
因为它允许递归。只要文件以 的方式命名titleS0xExx.ext
,用数字 0-9 替换 x,它似乎可以正常工作。以下是唯一需要递归的部分的相关部分。
watch=/home/terry/New_Video/TV_Show
events=close_write,move_to
excluded=
recursive=false
autoadd=false
command=cd /home/terry/New_Video/TV_Shows
command=sleep 61
command=cd -- "$(find ./ -name "S0" -type f -printf '%h' -quit)"
command=find ./ -type f -mmin +1 -exec rename 's/\ /\%/g' {} \;
command=mv -t /home/terry/Video_Processing/staging *%*
command=find /home/terry/New_Video/TV_Shows -empty -type d -delete
电影和其他文件夹也需要 61 秒的睡眠时间。
在这种情况下,时间延迟不是问题。这不是一个完美的解决方案,但它与“该死”的咒骂程度差不多。
由于某种原因,它没有删除空文件夹,因此可能需要进行一些调整。