![创建最近创建的文件的目录](https://linux22.com/image/806355/%E5%88%9B%E5%BB%BA%E6%9C%80%E8%BF%91%E5%88%9B%E5%BB%BA%E7%9A%84%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%AE%E5%BD%95.png)
在我拥有的系统上,文件通过一系列不同的机制上传到一个中央“传入”目录中。这些文件每天处理一次,然后移动到它们需要的位置(该逻辑与此无关)。它们最终位于 的子目录中/files/
。我猜一个简单的(尽管在我的特定情况下不准确)说法是,以“a”开头的文件被移动到/files/a/afile
。
所以我在 中有很多子目录/files/
。这很棒,对我来说很有用。但是客户刚刚告诉我,如果可以有一个“最近添加”的目录,其中可以找到过去一周的文件,那就太好了。
我的第一个想法是创建一个名为的目录/recent-files/
,并扩展文件处理脚本,以便在将文件移出后执行以下操作/incoming/
:
- 删除内部所有文件
/recent-files/
- 扫描
/files/
一周内创建的任何文件(非目录) - 为每个路径创建一个符号链接,并将其粘贴到
/recent-files/
听起来好像可以,但我的 bash 在算术和文件创建日期方面仍然很弱。有人能帮我写一个find ... -exec ...
近似第二部分和第三部分的语句吗?
当然,如果有其他方法来创建命令行和 NFS 可见的“搜索目录”,请告诉我。
答案1
find -L files -type f -newerct '-7 days' -exec ln -s -t recent-files {} +
(当然,根据需要更改“文件”和“最近的文件”。)
-newer 中使用的“c”不是创建时间,而是 stat 显示的“更改”字段(命令,例如 man 1 stat)。目前,*nix 文件系统很少存储创建时间,但可以存储更改(“c”)、修改(“m”)和访问(“a”)时间。如果您的文件系统确实存储了创建时间,则可以使用“B”(“出生时间”)——如果不支持,您会立即收到错误消息。
您可以查看确切的截止日期:
$ date -d '-7 days'
Sat Oct 16 02:46:27 UTC 2010
$ date # this was executed one second later
Sat Oct 23 02:46:28 UTC 2010
答案2
如果使用时代精神并且 FUSE 在您的场景中是可行的,Zeitgeist 文件系统支持在用户空间文件系统中按时间对文件和其他 Zeitgeist 事件进行排序。
另一个(更简单的)解决方案可能是使用类似文件已更改在您的脚本中监视目录中的传入文件。