如何在 Linux 中根据修改日期和时间查找和排序文件
通常,我们习惯于在系统中以文件的形式保存大量信息。有些是隐藏文件,有些保存在为便于理解而创建的单独文件夹中,而有些则保持原样。但是,这些东西会填满我们的目录;通常是桌面,看起来乱糟糟的。但是,当我们需要在这个庞大的集合中搜索在特定日期和时间修改的特定文件时,问题就出现了。
习惯使用 GUI 的用户可以使用文件管理器找到它,它以长列表格式列出文件,使我们很容易找出我们想要的东西,但是那些习惯黑屏的用户,或者甚至在没有 GUI 的服务器上工作的人都会想要一个简单的命令或一组命令来简化他们的搜索。
Linux 的真正魅力就在这里展现出来,因为 Linux 有一组命令,如果单独使用或一起使用,可以帮助搜索文件,或根据文件名称、修改日期、创建时间对文件集合进行排序,甚至可以考虑应用任何过滤器来获得结果。
在这里,我们将通过检查一组可以帮助按日期和时间对文件甚至文件列表进行排序的命令来揭示 Linux 的真正实力。
在 Linux 中对文件进行排序的 Linux 实用程序
一些基本的 Linux 命令行实用程序足以根据日期和时间对目录进行排序:
ls 命令
ls – 列出目录的内容,此实用程序可以列出文件和目录,甚至可以列出有关它们的所有状态信息,包括:修改或访问的日期和时间、权限、大小、所有者、组等。
我们已经介绍了很多关于 Linux ls 命令和sort 命令的文章,你可以在下面找到它们:
排序命令
sort – 此命令可用于按任何字段或字段的任何特定列对任何搜索的输出进行排序。
我们已经介绍了两篇有关 Linux排序命令的文章,您可以在下面找到它们:
如果您在黑屏上工作并且必须处理大量文件才能获得所需的文件,那么这些命令本身就是非常强大的命令。
使用日期和时间对文件进行排序的一些方法
以下是根据日期和时间排序的命令列表。
1. 根据修改时间列出文件
以下命令以长列表格式列出文件,并根据修改时间对文件进行排序,最新文件排在最前面。要按相反顺序排序,请'-r'
将此命令与 switch 结合使用。
# ls -lt total 673768 -rwxr----- 1 example example 3312130 Jan 19 15:24 When You Are Gone.MP3 -rwxr----- 1 example example 4177212 Jan 19 15:24 When I Dream At Night - Marc Anthony-1.mp3 -rwxr----- 1 example example 4177212 Jan 19 15:24 When I Dream At Night - Marc Anthony.mp3 -rwxr----- 1 example example 6629090 Jan 19 15:24 Westlife_Tonight.MP3 -rwxr----- 1 example example 3448832 Jan 19 15:24 We Are The World by USA For Africa (Michael Jackson).mp3 -rwxr----- 1 example example 8580934 Jan 19 15:24 This Love.mp3 -rwxr----- 1 example example 2194832 Jan 19 15:24 The Cross Of Changes.mp3 -rwxr----- 1 example example 5087527 Jan 19 15:24 T.N.T. For The Brain 5.18.mp3 -rwxr----- 1 example example 3437100 Jan 19 15:24 Summer Of '69.MP3 -rwxr----- 1 example example 4360278 Jan 19 15:24 Smell Of Desire.4.32.mp3 -rwxr----- 1 example example 4582632 Jan 19 15:24 Silence Must Be Heard 4.46.mp3 -rwxr----- 1 example example 4147119 Jan 19 15:24 Shadows In Silence 4.19.mp3 -rwxr----- 1 example example 4189654 Jan 19 15:24 Sarah Brightman & Enigma - Eden (remix).mp3 -rwxr----- 1 example example 4124421 Jan 19 15:24 Sade - Smooth Operator.mp3 -rwxr----- 1 example example 4771840 Jan 19 15:24 Sade - And I Miss You.mp3 -rwxr----- 1 example example 3749477 Jan 19 15:24 Run To You.MP3 -rwxr----- 1 example example 7573679 Jan 19 15:24 Roger Sanchez_Another Chance_Full_Mix.mp3 -rwxr----- 1 example example 3018211 Jan 19 15:24 Principal Of Lust.3.08.mp3 -rwxr----- 1 example example 5688390 Jan 19 15:24 Please Forgive Me.MP3 -rwxr----- 1 example example 3381827 Jan 19 15:24 Obvious.mp3 -rwxr----- 1 example example 5499073 Jan 19 15:24 Namstey-London-Viraaniya.mp3 -rwxr----- 1 example example 3129210 Jan 19 15:24 MOS-Enya - Only Time (Pop Radio mix).m
2. 根据上次访问时间列出文件
根据上次访问时间列出目录中的文件,即基于文件上次访问的时间,而不是修改的时间。
# ls -ltu total 3084272 drwxr-xr-x 2 example example 4096 Jan 19 15:24 Music drwxr-xr-x 2 example example 4096 Jan 19 15:22 Linux-ISO drwxr-xr-x 2 example example 4096 Jan 19 15:22 Music-Player drwx------ 3 example example 4096 Jan 19 15:22 tor-browser_en-US drwxr-xr-x 2 example example 4096 Jan 19 15:22 bin drwxr-xr-x 11 example example 4096 Jan 19 15:22 Android Games drwxr-xr-x 2 example example 4096 Jan 19 15:22 Songs drwxr-xr-x 2 example example 4096 Jan 19 15:22 renamefiles drwxr-xr-x 2 example example 4096 Jan 19 15:22 katoolin-master drwxr-xr-x 2 example example 4096 Jan 19 15:22 Tricks drwxr-xr-x 3 example example 4096 Jan 19 15:22 Linux-Tricks drwxr-xr-x 6 example example 4096 Jan 19 15:22 tuptime drwxr-xr-x 4 example example 4096 Jan 19 15:22 xdm drwxr-xr-x 2 example example 20480 Jan 19 15:22 ffmpeg usage drwxr-xr-x 2 example example 4096 Jan 19 15:22 xdm-helper
3. 根据上次修改时间列出文件
根据文件状态信息的最后修改时间或列出目录中的文件'ctime'
。此命令将首先列出其状态信息(如所有者、组、权限、大小等)最近已更改的文件。
# ls -ltc total 3084272 drwxr-xr-x 2 example example 4096 Jan 19 15:24 Music drwxr-xr-x 2 example example 4096 Jan 19 13:05 img -rw------- 1 example example 262191 Jan 19 12:15 example.jpeg drwxr-xr-x 5 example example 4096 Jan 19 10:57 Desktop drwxr-xr-x 7 example example 12288 Jan 18 16:00 Downloads drwxr-xr-x 13 example example 4096 Jan 18 15:36 VirtualBox VMs -rwxr-xr-x 1 example example 691 Jan 13 14:57 special.sh -rw-r--r-- 1 example example 654325 Jan 4 16:55 powertop-2.7.tar.gz.save -rw-r--r-- 1 example example 654329 Jan 4 11:17 filename.tar.gz drwxr-xr-x 3 example example 4096 Jan 4 11:04 powertop-2.7 -rw-r--r-- 1 example example 447795 Dec 31 14:22 Happy-New-Year-20ynyigdxjpccwtwohaawolbgfsdxejqgf.jpg -rw-r--r-- 1 example example 12 Dec 18 18:46 ravi -rw-r--r-- 1 example example 1823 Dec 16 12:45 setuid.txt ...
如果'-a'
将 switch 与上述命令一起使用,它们可以列出并排序当前目录中的隐藏文件,并且'-r'
switch 以相反的顺序列出输出。
但是,对于更深入的排序,例如对find命令的输出进行排序,也可以使用,但是这更有帮助,因为输出可能不仅包含文件名,还包含用户想要的任何字段。ls
'sort'
下面的命令显示使用sort
with命令根据日期和时间find
对文件列表进行排序。
要了解有关 find 命令的更多信息,请访问以下链接:Linux 中“find”命令的 35 个实际示例
4. 根据月份对文件进行排序
这里,我们使用find
命令查找根(‘/’)
目录中的所有文件,然后打印结果为:访问文件的月份,然后是文件名。在完整结果中,我们列出了前11 个条目。
# find / -type f -printf "\n%Ab %p" | head -n 11 Dec /usr/lib/nvidia/pre-install Dec /usr/lib/libcpufreq.so.0.0.0 Apr /usr/lib/libchromeXvMCPro.so.1.0.0 Apr /usr/lib/libt1.so.5.1.2 Apr /usr/lib/libchromeXvMC.so.1.0.0 Apr /usr/lib/libcdr-0.0.so.0.0.15 Dec /usr/lib/msttcorefonts/update-ms-fonts Nov /usr/lib/ldscripts/elf32_x86_64.xr Nov /usr/lib/ldscripts/elf_i386.xbn Nov /usr/lib/ldscripts/i386linux.xn
以下命令使用键作为第一个字段对输出进行排序,由指定'-k1'
,然后按月份进行排序,并按照'M'
其前面的指定进行排序。
# find / -type f -printf "\n%Ab %p" | head -n 11 | sort -k1M Apr /usr/lib/libcdr-0.0.so.0.0.15 Apr /usr/lib/libchromeXvMCPro.so.1.0.0 Apr /usr/lib/libchromeXvMC.so.1.0.0 Apr /usr/lib/libt1.so.5.1.2 Nov /usr/lib/ldscripts/elf32_x86_64.xr Nov /usr/lib/ldscripts/elf_i386.xbn Nov /usr/lib/ldscripts/i386linux.xn Dec /usr/lib/libcpufreq.so.0.0.0 Dec /usr/lib/msttcorefonts/update-ms-fonts Dec /usr/lib/nvidia/pre-install
5. 根据日期对文件进行排序
这里,我们再次使用find
命令来查找根目录中的所有文件,但现在我们将打印结果为:上次访问文件的日期、上次访问文件的时间以及文件名。从中我们取出前 11 个条目。
# find / -type f -printf "\n%AD %AT %p" | head -n 11 12/08/15 11:30:38.0000000000 /usr/lib/nvidia/pre-install 12/07/15 10:34:45.2694776230 /usr/lib/libcpufreq.so.0.0.0 04/11/15 06:08:34.9819910430 /usr/lib/libchromeXvMCPro.so.1.0.0 04/11/15 06:08:34.9939910430 /usr/lib/libt1.so.5.1.2 04/11/15 06:08:35.0099910420 /usr/lib/libchromeXvMC.so.1.0.0 04/11/15 06:08:35.0099910420 /usr/lib/libcdr-0.0.so.0.0.15 12/18/15 11:19:25.2656728990 /usr/lib/msttcorefonts/update-ms-fonts 11/12/15 12:56:34.0000000000 /usr/lib/ldscripts/elf32_x86_64.xr 11/12/15 12:56:34.0000000000 /usr/lib/ldscripts/elf_i386.xbn 11/12/15 12:56:34.0000000000 /usr/lib/ldscripts/i386linux.xn
下面的排序命令首先根据年份的最后一位数字排序,然后根据月份的最后一位数字反向排序,最后根据第一个字段排序。这里,“ 1.8 ”表示第一个字段的第 8 列,其前面的“n”表示数字排序,而“r”表示反向排序。
# find / -type f -printf "\n%AD %AT %p" | head -n 11 | sort -k1.8n -k1.1nr -k1 12/07/15 10:34:45.2694776230 /usr/lib/libcpufreq.so.0.0.0 12/08/15 11:30:38.0000000000 /usr/lib/nvidia/pre-install 12/18/15 11:19:25.2656728990 /usr/lib/msttcorefonts/update-ms-fonts 11/12/15 12:56:34.0000000000 /usr/lib/ldscripts/elf32_x86_64.xr 11/12/15 12:56:34.0000000000 /usr/lib/ldscripts/elf_i386.xbn 11/12/15 12:56:34.0000000000 /usr/lib/ldscripts/i386linux.xn 04/11/15 06:08:34.9819910430 /usr/lib/libchromeXvMCPro.so.1.0.0 04/11/15 06:08:34.9939910430 /usr/lib/libt1.so.5.1.2 04/11/15 06:08:35.0099910420 /usr/lib/libcdr-0.0.so.0.0.15 04/11/15 06:08:35.0099910420 /usr/lib/libchromeXvMC.so.1.0.0
6. 根据时间对文件进行排序
在这里,我们再次使用find
命令列出根目录中的前 11 个文件,并以以下格式打印结果:上次访问文件的时间,然后是文件名。
# find / -type f -printf "\n%AT %p" | head -n 11 11:30:38.0000000000 /usr/lib/nvidia/pre-install 10:34:45.2694776230 /usr/lib/libcpufreq.so.0.0.0 06:08:34.9819910430 /usr/lib/libchromeXvMCPro.so.1.0.0 06:08:34.9939910430 /usr/lib/libt1.so.5.1.2 06:08:35.0099910420 /usr/lib/libchromeXvMC.so.1.0.0 06:08:35.0099910420 /usr/lib/libcdr-0.0.so.0.0.15 11:19:25.2656728990 /usr/lib/msttcorefonts/update-ms-fonts 12:56:34.0000000000 /usr/lib/ldscripts/elf32_x86_64.xr 12:56:34.0000000000 /usr/lib/ldscripts/elf_i386.xbn 12:56:34.0000000000 /usr/lib/ldscripts/i386linux.xn
以下命令根据输出的第一个字段的第一列(即小时的第一位数字)对输出进行排序。
# find / -type f -printf "\n%AT %p" | head -n 11 | sort -k1.1n 06:08:34.9819910430 /usr/lib/libchromeXvMCPro.so.1.0.0 06:08:34.9939910430 /usr/lib/libt1.so.5.1.2 06:08:35.0099910420 /usr/lib/libcdr-0.0.so.0.0.15 06:08:35.0099910420 /usr/lib/libchromeXvMC.so.1.0.0 10:34:45.2694776230 /usr/lib/libcpufreq.so.0.0.0 11:19:25.2656728990 /usr/lib/msttcorefonts/update-ms-fonts 11:30:38.0000000000 /usr/lib/nvidia/pre-install 12:56:34.0000000000 /usr/lib/ldscripts/elf32_x86_64.xr 12:56:34.0000000000 /usr/lib/ldscripts/elf_i386.xbn 12:56:34.0000000000 /usr/lib/ldscripts/i386linux.xn
7. 根据日期对 ls -l 的输出进行排序
'ls -l'
此命令先根据第 6 个字段的月份对命令的输出进行排序,然后根据第 7 个字段(即日期)进行数字排序。
# ls -l | sort -k6M -k7n total 116 -rw-r--r-- 1 root root 0 Oct 1 19:51 backup.tgz drwxr-xr-x 2 root root 4096 Oct 7 15:27 Desktop -rw-r--r-- 1 root root 15853 Oct 7 15:19 powertop_report.csv -rw-r--r-- 1 root root 79112 Oct 7 15:25 powertop.html -rw-r--r-- 1 root root 0 Oct 16 15:26 file3 -rw-r--r-- 1 root root 13 Oct 16 15:17 B -rw-r--r-- 1 root root 21 Oct 16 15:16 A -rw-r--r-- 1 root root 64 Oct 16 15:38 C
结论
同样,通过掌握一些sort命令的知识,您可以根据任何字段甚至任何您想要的列对几乎任何列表进行排序。这些是一些帮助您根据日期或时间对文件进行排序的技巧。您可以根据这些技巧构建自己的技巧。但是,如果您有任何其他有趣的技巧,您可以随时在评论中提及。