用于检查文件年龄并重命名的 shell 脚本

用于检查文件年龄并重命名的 shell 脚本

我是 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因此可能不便于携带。

相关内容