创建比X年龄更新的符号链接文件,然后在文件老化后删除链接?

2 投票
2 回答
524 浏览
提问于 2025-04-15 22:15

我每天都有很多文件和文件夹进来,这些文件和文件夹会自动被整理到不同的文件夹里。我想找个办法,自动找到这些文件和文件夹,并在一个叫“incoming”的文件夹里为它们创建快捷方式。只根据文件的年龄来查找应该就够了,不过如果能同时根据文件的拥有者来查找就更好了。一旦被链接的文件或文件夹达到一定的年龄,比如说5天,就自动从“incoming”文件夹中删除这些快捷方式。请问,这个能用简单的shell脚本或python脚本实现吗?这个脚本可以通过cron定时运行吗?谢谢!

2 个回答

1

我不太确定你想要的符号链接是什么样的,但我可以先给你一个初步的建议:

find /incoming -mtime -5 -user nr -exec ln -s '{}' /usr/local/symlinks ';'

这个命令会在 /incoming 文件夹中查找属于 nr 的文件,前提是这些文件的创建时间不超过5天,然后把它们链接到 /usr/local/symlinks 文件夹里。可惜的是,ln 命令没有一个很好的选项来忽略已经存在的文件。所以你最好写一个脚本来处理链接的事情,这样可以让整个过程更高效:

find /incoming -mtime -5 -user nr -print0 | xargs -0 mylink

在这里,mylink 代表着你要创建的链接。

#!/bin/bash
for i
do
  link=/usr/local/symlinks/"$(basename "$i")"
  [[ -L "$link" ]] || ln -s "$i" /usr/local/symlinks
done

如果你想要更高效一点,可以先把要链接的文件列表放到一个数组里,然后用一个 ln 命令一次性链接所有文件,不过这样会涉及很多语法,我觉得没必要那么麻烦。

如果你想删除那些指向超过5天前文件的符号链接,可以使用:

find -L /usr/local/symlinks -mtime +5 -user nr -exec rm '{}' ';'

或者你也可以用 xargs 来实现:

find -L /usr/local/symlinks -mtime +5 -user nr -print0 | xargs -0 rm -f
2

使用incron来创建符号链接,然后在cron中用find -L来删除它。

撰写回答