如何监视目录以复制和粘贴文件?

如何创建用于监视文件传输的脚本,包括源位置和目标位置? (例如:从/ home / Desktop到/ home / Documents的Test.file)。


下面的答案需要inotify-tools ,它们可能不在你的系统上。 跑

 sudo apt install inotify-tools 

如何设置监视脚本以记录目录中发生的情况

正如评论中所提到的,除非在终端中运行它们并使用script命令记录正在发生的事情,否则不能“拦截”复制或移动命令。

但是,您可以使用inotifywait密切关注目录内发生的情况

基本的inotifywait脚本,用于记录您的目录

一个简单的脚本是:

 #!/bin/bash DIR="/path/to/directory/to/watch" inotifywait -m -r -e move -e create "$DIR" | while read f do # remove 'echo changed' after the test echo changed echo $f >> /path/to/logfile.txt done 

只需设置脚本中目录的路径,将其保存为some_script.sh并运行它。 更高级的当然是时间戳事件,分析输出等,但这是主要的想法。 您可以使用-o选项,而不是“回显”输出,请参阅man inotifywait 。

说明

要继续记录,您需要设置选项-m

来自man inotifywait

 -m, --monitor Instead of exiting after receiving a single event, execute indefinitely. The default behaviour is to exit after the first event occurs. 

要递归地记录,您需要设置选项-r

 -r, --recursive Watch all subdirectories of any directories passed as arguments. Watches will be set up recursively to an unlimited depth. Symbolic links are not traversed. Newly created subdirectories will also be watched. 

此外,您需要指定要触发的事件

 EVENTS The following events are valid for use with the -e option: access A watched file or a file within a watched directory was read from. modify A watched file or a file within a watched directory was written to. attrib The metadata of a watched file or a file within a watched direc‐ tory was modified. This includes timestamps, file permissions, extended attributes etc. close_write A watched file or a file within a watched directory was closed, after being opened in writeable mode. This does not necessarily imply the file was written to. close_nowrite A watched file or a file within a watched directory was closed, after being opened in read-only mode. close A watched file or a file within a watched directory was closed, regardless of how it was opened. Note that this is actually implemented simply by listening for both close_write and close_nowrite, hence all close events received will be output as one of these, not CLOSE. open A watched file or a file within a watched directory was opened. moved_to A file or directory was moved into a watched directory. This event occurs even if the file is simply moved from and to the same directory. moved_from A file or directory was moved from a watched directory. This event occurs even if the file is simply moved from and to the same directory. move A file or directory was moved from or to a watched directory. Note that this is actually implemented simply by listening for both moved_to and moved_from, hence all close events received will be output as one or both of these, not MOVE. move_self A watched file or directory was moved. After this event, the file or directory is no longer being watched. create A file or directory was created within a watched directory. delete A file or directory within a watched directory was deleted. delete_self A watched file or directory was deleted. After this event the file or directory is no longer being watched. Note that this event can occur even if it is not explicitly being listened for. unmount The filesystem on which a watched file or directory resides was unmounted. After this event the file or directory is no longer being watched. Note that this event can occur even if it is not explicitly being listened to. 

您需要使用-e预先添加要触发的每个事件:

 -e move -e create 

当然,您可以从列表中设置任何事件触发器。

结果

对我的监视脚本的简短测试为我们提供了如下输出:

 /home/jacob/Bureaublad/test/Untitled Folder/ MOVED_FROM CV.pdf /home/jacob/Bureaublad/test/Untitled Folder/ MOVED_TO CV.pdf /home/jacob/Bureaublad/test/Untitled Folder/ MOVED_TO pscript_3.py /home/jacob/Bureaublad/test/Untitled Folder/ MOVED_TO,ISDIR numpy /home/jacob/Bureaublad/test/Untitled Folder/ CREATE Untitled Document 3 /home/jacob/Bureaublad/test/Untitled Folder/ CREATE,ISDIR Untitled Folder