一个 bash 脚本,用于将文件夹中的所有文件复制到桌面上的唯一文件夹中

一个 bash 脚本,用于将文件夹中的所有文件复制到桌面上的唯一文件夹中

我想要一个 bash 脚本,将桌面上的所有文件夹和文件复制到桌面上名为“new”的文件夹中。假设,每当我在桌面上创建文件时,该文件都应自动移动到桌面上名为“new”的文件夹中。

答案1

您可以使用这个方便的工具inoticoming来监视~/Desktop文件夹中的传入文件,并对每个事件自动执行操作,例如将它们移动到不同的位置。

请注意,此命令仅关注创建或修改的仅限文件
它会忽略您在其中创建新目录的情况。它还会忽略在任何子目录中创建或修改的文件。

我尝试制作一个对目录也做出反应的命令,但这似乎是不可能的,除非你能接受这样的副作用:将目录复制到监视位置会随机失败,因为在inotifywatch所有文件复制完成之前移动目标目录。

inoticomingUbuntu 没有预装它,但你可以通过运行一次来​​安装它

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有关更多信息,请参阅。

相关内容