每一个人都有本身的隐私 尤为是数字信息时代更是如此 小到本身写下的情书 大到公司商业机密 抑或是偷偷下载的日本XXX.avi安全
这些隐私 放桌面——找死 放某个隐秘目录——麻烦 放垃圾筒……谁会这么干 真想有个工具 自动帮我压缩 自动帮我放到安全位置bash
嗯…… 良许今天就带你实现这个过程工具
要实现上述那个鲜为人知的过程,咱们须要安装两个工具:inotify-tools 和 gzip 。测试
若是你使用的是 Ubuntu 或者其它基于 Debian 的发行版,那么可使用 apt-get 命令安装以上两个工具。在其余 Linux 发行版上,则须要使用对应的包管理工具。.net
$ sudo apt-get install inotify-tools gzip
顾名思义,inotify-tools
是包含了不少工具的工具集。咱们首先来测试一下,若是一个目录里有新文件建立时,会捕捉到什么事件。这里咱们将使用到一个名为 inotifywatchinotify-tools
的工具。code
咱们先在任意位置建立一个名为 incoming 的新目录:orm
$ mkdir incoming
而后再执行如下命令开始监测此目录:视频
$ inotifywatch -v incoming
这个命令将使用 inotify 工具来监视 incoming 目录中的全部文件系统事件。咱们使用这个工具的目的就是来监测在目标目录下建立新文件时会有什么事件产生。blog
在这里,-v
选项打印工具的输出信息。同时,它还有超时选项 -t
,但在这里咱们未指定,因此它将持续收集事件,直到咱们按 Ctrl + C
才会退出。事件
命令运行以后终端将会打印如下信息:
接下来,打开一个新的终端窗口并切换到刚刚创建的 incoming 目录。而后再使用 touch 命令建立名为 newfile 的新文件。
$ cd incoming/ $ touch newfile
如今咱们再回到第一个终端窗口,按下 CTRL+C 中止 inotifywatch 命令。咱们将获得如下信息:
在结果信息里,咱们能够看到 inotifywatch 捕获到 4 个事件,包括:属性、建立、打开、写入并关闭。这 4 个事件都是由 touch newfile
这个命令产生的。
固然,这几个事件都只是 inotifywatch 所能捕获的众多事件的一小部分,更多事件咱们能够在它的主页上查看。
可是,不少状况下咱们并不须要太多事件。假如咱们只对下面两个事件感兴趣:
咱们再来使用 inotifywatch 工具,可是此次只让它监视这两个事件。咱们可使用如下命令来达到这个目的:
$ inotifywatch -v -e create -e moved_to incoming
而后再切换到第二个终端窗口中,咱们建立一个新的文件,再更改它的内容。
再以后,咱们在 /tmp 目录下随便再建立个文件,再将它移动到目标目录。整个过程如如下命令所示:
$ touch incoming/created $ echo Testing123 >> incoming/created $ touch /tmp/created2 $ mv /tmp/created2 incoming/
接着咱们再返回第一个终端窗口,按下 CTRL + C 中止 inotifywatch 。咱们将看到如下输出:
从以上结果咱们能够看出,inotifywatch 只捕获了两个事件:create 及 moved_to 。而对于其它事件,好比修改文件内容,则所有被忽略。
**正是利用了 inotifywatch 的这个能够捕获事件的特性,咱们能够实现当一个目录里有新文件移入的时候,将其压缩并放置到其它地方的目的。**这样咱们就能实现将本身的私密文件丢到那个目录,自动压缩并存放到安全位置。固然,充分利用这些特性,咱们能够实现更多好玩的功能。
如今,咱们来一步步实现上面所提到的需求。这里咱们使用到另一个工具:inotifywait
,它的参数及使用方法与 inotifywatch
相似,当目录里建立了新文件或移入了其它位置的文件,它将执行咱们所指定的脚本。
咱们首先建立一个名为 processed 的目录,用来保存已经处理过的文件。
$ mkdir processed
而后,建立一个名为 watch-incoming.sh 的脚本,并添加如下内容:
#!/bin/bash TARGET=~/incoming/ PROCESSED=~/processed/ inotifywait -m -e create -e moved_to --format "%f" $TARGET \ | while read FILENAME do echo Detected $FILENAME, moving and zipping mv "$TARGET/$FILENAME" "$PROCESSED/$FILENAME" gzip "$PROCESSED/$FILENAME" done
这个脚本里 inotifywait 使用了 -m
选项,表示监测到指定事件时执行后续的命令。在这条命令里, inotifywait 只监测 create 和 moved_to 事件。当这两个事件发生时,文件名都会传递给 read 命令并赋值给 FILENAME 变量,而后再执行while循环下的代码块:首先将文件移动到刚刚建立的 processed 目录,而后再进行 gzip 压缩。
咱们为该脚本赋予可执行权限,而后从主目录运行这个脚本。
$ chmod u+x watch-incoming.sh $ ./watch-incoming.sh
如今打开第二个终端窗口并在 incoming 目录中建立一个新的文件。而后再列出 incoming 和 processed 目录的内容,看看操做结束以后的结果。
脚本检测到咱们在 incoming 目录下有新文件建立,将其复制到 processed 目录中,而后使用 gzip 进行压缩。
这个功能实现后,咱们还能够 DIY 更多好玩的功能。例如,咱们能够为图像文件添加水印,将原始视频压缩为mp4格式,批量修改文件名,等等。不怕不实现,就怕脑门不够大!
-----------------
我是良许,世界500强外企 Linux 开发工程师,专业生产 Linux 干货。欢迎关注个人公众号「良许Linux」,回复「1024」获取最新最全的技术资料,回复「入群」进入高手如云技术交流群。