我想要一个bash脚本,它将桌面中的所有文件夹和文件复制到桌面中名为“ new”的文件夹中。假设,每当我在Desktop中创建文件时,该文件应自动移动到Desktop中名为“ new”的文件夹中。
您可以使用方便的工具inoticoming
来监视~/Desktop
文件夹中的传入文件,并自动对每个事件执行操作,例如将它们移动到其他位置。
请注意,此命令仅注意创建或修改的文件。
在其中创建新目录时,它将忽略。它还将忽略在任何子目录中创建或修改的文件。我试着做一个对目录也有反应的命令,但是这似乎是不可能的,除非您对将目录复制到受监视的位置会随机失败的副作用感到满意,因为
inotifywatch
在所有文件复制完成之前先移动目标目录。
inoticoming
并未预装Ubuntu,但是您只需运行一次即可安装它
sudo apt-get install inoticoming
然后,您在下面键入此命令,然后发现魔术发生了:
inoticoming --foreground --initialsearch ~/Desktop --chdir ~/Desktop mv -- '{}' ~/Desktop/new \;
参数说明:
--foreground
使工具在前台运行,并在执行任何操作时将日志信息打印到终端。这对于初始测试和调试很有用。
一旦确定它可以满足您的要求,就可以忽略此参数,让它派生一个后台守护程序,该命令将立即返回,并且不产生任何输出。如果要自动启动命令(例如在登录过程中),则可以这样做。在这种情况下,配置日志文件可能很有意义,请参阅man inoticoming
以获得更多信息。
--initialsearch
当您启动命令时,对目录中已经存在的所有文件执行附加扫描。没有它,仅处理在其运行时创建或修改的文件。
~/Desktop
要观看的目录
--chdir ~/Desktop
~/Desktop
每次出现或修改文件时,将工作目录更改为执行指定操作之前的目录
mv -- '{}' ~/Desktop/new \;
您要在每个事件上调用的实际操作命令。{}
将被替换为触发事件的文件的名称。请注意,它是如何用单引号引起来的,--
以防止它被分割或解释为shell或作为的关键字参数mv
。尾随\;
表示动作命令的结尾,并且是必需的。
当inoticoming
以前台模式运行时,您可以通过在终端中按Ctrl+退出它C。
要在不启动后台启动后台驻留程序的情况下杀死它--foreground
,最简单的方法是运行它killall inoticoming
。要注意的是这个杀死所有正在运行的实例中inoticoming
。如果要确保仅杀死一个特定实例,则可以将其PID(进程ID)存储在文件中。有关man inoticoming
的更多信息,请参见。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句