Contents

查找最近在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