我想要一个 bash 脚本,将桌面上的所有文件夹和文件复制到桌面上名为“new”的文件夹中。假设,每当我在桌面上创建文件时,该文件都应自动移动到桌面上名为“new”的文件夹中。
答案1
您可以使用这个方便的工具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
有关更多信息,请参阅。