查找最近在Linux中修改的文件
1. 简介
在各种情况下,我们想要搜索最近更改过的文件。
例如,作为系统管理员,我们负责维护和配置计算机系统。有时,因为我们要处理大量配置文件,我们可能想知道最近修改了哪些文件。
在本教程中,我们将使用 bash 命令查找最近在 Linux 中更改的文件。
2. find命令
首先,我们将探索find实用程序 ,它是实现预期目的的最常用方法。该命令用于递归查找文件和目录并对它们执行进一步的操作。
2.1. -mtime和*-mmin*
-mtime很方便,例如,如果我们想从当前目录中查找过去 24 小时内发生更改的所有文件:
find . -mtime -1
请注意,. 用于引用当前目录。** -mtime n是一个表达式,用于查找恰好在n天前**被修改的文件和目录。 此外,该表达式还可以以其他两种方式使用:
- -mtime +n = 查找n天前修改过的文件和目录
- -mtime -n = 查找少于n天前修改的文件和目录
同样,我们可以使用-mmin n*表达式来依赖分钟而不是天*:
find /home/sports -mmin +120
因此,此命令递归地查找至少 120 分钟前修改的*/home/sports*目录中的所有文件和目录。
接下来,如果我们希望只搜索文件,不包括目录,我们需要添加*-type f*表达式:
find /home/sports -type f -mmin +120
此外,我们甚至可以编写表达式。所以,让我们找出不到 120 分钟前和超过 60 分钟前被更改的文件:
find . -type f -mmin -120 -mmin +60
2.2. -newermt
**有时我们想要查找基于特定日期修改过的文件。**为了满足这个要求,我们必须探索另一个参数,它的语法如下:
-newermt 'yyyy-mm-dd'
通过使用这个表达式,我们可以得到在指定日期之前被更改的文件。
因此,让我们构建一个命令来更好地理解新参数:
find . -type f -newermt 2019-07-24
此外,我们可以使用组合表达式获取在特定日期修改的文件。
因此,我们将在 ‘2019-07-24’ 修改文件:
find . -type f -newermt 2019-07-24 ! -newermt 2019-07-25
最后,还有另一个版本的*-newermt参数,类似于-mmin和-mtime*。
第一个命令查找过去 24 小时内修改的文件。其余类似:
find . -type f -newermt "-24 hours"
find . -type f -newermt "-10 minutes"
find . -type f -newermt "1 day ago"
find . -type f -newermt "yesterday"
3. ls命令
我们知道ls 命令列出了特定目录中文件的信息。它的用途之一是显示文件的长格式并按修改时间对输出进行排序:
ls -lt
这将导致类似:
-rw-r--r-- 1 root root 4233 Jul 27 18:44 b.txt
-rw-rw-r-- 1 root root 2946 Jul 27 18:12 linux-commands.txt
-rw-r--r-- 1 root root 5233 Jul 20 17:02 a.txt
我们可能无法像find命令一样列出最近修改的文件。但是,我们可以通过对ls命令的结果应用grep命令来根据特定日期或时间过滤上述输出:
ls -lt | grep 'Jul 27'
-rw-r--r-- 1 root root 4233 Jul 27 18:44 b.txt
-rw-rw-r-- 1 root root 2946 Jul 27 18:12 linux-commands.txt
ls -lt | grep '17:'
-rw-r--r-- 1 root root 5233 Jul 20 17:02 a.txt
请注意,find命令默认是递归的。为了在ls命令上启用递归功能,我们还需要添加R(大写)参数:
ls -ltR