![用于检查文件年龄并重命名的 shell 脚本](https://linux22.com/image/155819/%E7%94%A8%E4%BA%8E%E6%A3%80%E6%9F%A5%E6%96%87%E4%BB%B6%E5%B9%B4%E9%BE%84%E5%B9%B6%E9%87%8D%E5%91%BD%E5%90%8D%E7%9A%84%20shell%20%E8%84%9A%E6%9C%AC.png)
我是 Linux 新手,目前我想创建一个 shell 脚本来检查指定目录中已存在 N 天的所有文件并重命名它。例子:
/home/foo/oldfile.txt
2019-01-01
进入
/home/foo/oldfile.txt.old
我怎样才能做到这一点?
答案1
要重命名任何超过 N 天的文件(本例中 N=30),请尝试:
find . -type f -mtime +30 -exec sh -c 'mv -i "$1" "$1.old"' MV {} \;
上面在当前目录下递归搜索。如果您不希望它下降到子目录中,请使用:
find . -maxdepth 1 -type f -mtime +3 -exec sh -c 'mv -i "$1" "$1.old"' MV {} \;
为了安全起见,您可能需要先尝试此命令,如果您喜欢结果,请删除echo
:
find . -maxdepth 1 -type f -mtime +3 -exec sh -c 'echo mv -i "$1" "$1.old"' MV {} \;
怎么运行的
find .
find
这将在当前目录 中启动一个命令.
。-type f
这告诉
find
我们只查找常规文件。-mtime +30
这表明
find
仅查找超过 30 天的文件。替换30
为您想要的任何数字。请注意,由于
find
有一种特殊的四舍五入文件期限的方法,“超过 30 天”的确切截止时间可能不是您所期望的。man find
详情请参阅。-exec sh -c 'mv -i "$1" "$1.old"' MV {} \;
这告诉我们对找到的每个文件
find
运行命令。mv
该-i
选项指示mv
在覆盖现有文件之前以交互方式询问。此类选项有很多种。man mv
详情请参阅。
GNU 查找或类似的
某些版本的find
,例如 GNU ,使得上面find
的使用变得不必要(小提示:sh
匆忙):
find . -type f -mtime +30 -exec mv -i {} {}.old \;
这不是必需的POSIX因此可能不便于携带。