如何根據修改日期和時間在 Linux 中查找和排序文件

通常,我們習慣在系統中以文件形式保存大量信息。有些是隱藏文件,有些保存在為了我們更容易理解而創建的獨立文件夾中,而有些則原樣保存。但是,這整個過程填滿了我們的目錄;通常是桌面,使其看起來一團亂。但是,當我們需要在這個龐大的集合中搜索特定日期和時間修改的特定文件時,問題就出現了。

Find and Sort Files by Date and Time in Linux

習慣使用圖形用戶界面的人可以使用文件管理器找到它,該文件管理器以長列表格式列出文件,使我們更容易找到我們想要的東西,但是那些習慣使用黑屏幕的用戶,甚至是在沒有圖形用戶界面的服務器上工作的任何人都希望有一個簡單的命令或一組命令,可以簡化他們的搜索。

這裡展示了Linux的真正之美,因為Linux有一系列命令,如果單獨使用或結合使用,可以幫助搜索文件,或者根據它們的名稱、修改日期、創建時間,甚至您可以考慮應用的任何過濾器來對文件進行排序。

在這裡,我們將通過檢查一組命令來揭示Linux的真正實力,這些命令可以幫助按日期時間對文件或文件列表進行排序。

Linux中用於對文件進行排序的Linux實用程序

一些基本的Linux命令行實用程序,僅僅足以根據日期時間對目錄進行排序的命令是:

ls 命令

ls – 列出目錄內容,此工具可列出文件和目錄,甚至可以列出有關它們的所有狀態信息,包括:修改或訪問的日期和時間、權限、大小、所有者、組等。

我們已經涵蓋了許多關於Linux ls命令sort命令的文章,你可以在下面找到它們:

  1. 通過15個基本示例學習ls命令
  2. 通過示例學習7個高級ls命令
  3. Linux中關於ls命令的15個有用面試問題

sort命令

sort – 此命令可用於通過任何字段或任何特定字段的任何特定列來排序任何搜索的輸出。

我們已經涵蓋了兩篇關於Linux sort命令的文章,你可以在下面找到它們:

  1. 14個Linux‘sort’命令示例- 第1部分
  2. 7個有用的Linux‘sort’命令示例- 第2部分

這些指令本身就是非常強大的指令,如果你在黑屏幕上工作並且必須處理大量文件,只是為了得到你想要的那一個。

使用日期和時間排序文件的一些方法

以下是根據日期和時間排序的命令列表。

1. 基於修改時間列出文件

下面的命令以長列表格式列出文件,並根據修改時間排序,最新的文件排在前面。要按相反的順序排序,請使用帶有'-r'開關的此命令。

# ls -lt

total 673768
-rwxr----- 1 tecmint tecmint  3312130 Jan 19 15:24 When You Are Gone.MP3
-rwxr----- 1 tecmint tecmint  4177212 Jan 19 15:24 When I Dream At Night - Marc Anthony-1.mp3
-rwxr----- 1 tecmint tecmint  4177212 Jan 19 15:24 When I Dream At Night - Marc Anthony.mp3
-rwxr----- 1 tecmint tecmint  6629090 Jan 19 15:24 Westlife_Tonight.MP3
-rwxr----- 1 tecmint tecmint  3448832 Jan 19 15:24 We Are The World by USA For Africa (Michael Jackson).mp3
-rwxr----- 1 tecmint tecmint  8580934 Jan 19 15:24 This Love.mp3
-rwxr----- 1 tecmint tecmint  2194832 Jan 19 15:24 The Cross Of Changes.mp3
-rwxr----- 1 tecmint tecmint  5087527 Jan 19 15:24 T.N.T. For The Brain 5.18.mp3
-rwxr----- 1 tecmint tecmint  3437100 Jan 19 15:24 Summer Of '69.MP3
-rwxr----- 1 tecmint tecmint  4360278 Jan 19 15:24 Smell Of Desire.4.32.mp3
-rwxr----- 1 tecmint tecmint  4582632 Jan 19 15:24 Silence Must Be Heard 4.46.mp3
-rwxr----- 1 tecmint tecmint  4147119 Jan 19 15:24 Shadows In Silence 4.19.mp3
-rwxr----- 1 tecmint tecmint  4189654 Jan 19 15:24 Sarah Brightman  & Enigma - Eden (remix).mp3
-rwxr----- 1 tecmint tecmint  4124421 Jan 19 15:24 Sade - Smooth Operator.mp3
-rwxr----- 1 tecmint tecmint  4771840 Jan 19 15:24 Sade - And I Miss You.mp3
-rwxr----- 1 tecmint tecmint  3749477 Jan 19 15:24 Run To You.MP3
-rwxr----- 1 tecmint tecmint  7573679 Jan 19 15:24 Roger Sanchez_Another Chance_Full_Mix.mp3
-rwxr----- 1 tecmint tecmint  3018211 Jan 19 15:24 Principal Of Lust.3.08.mp3
-rwxr----- 1 tecmint tecmint  5688390 Jan 19 15:24 Please Forgive Me.MP3
-rwxr----- 1 tecmint tecmint  3381827 Jan 19 15:24 Obvious.mp3
-rwxr----- 1 tecmint tecmint  5499073 Jan 19 15:24 Namstey-London-Viraaniya.mp3
-rwxr----- 1 tecmint tecmint  3129210 Jan 19 15:24 MOS-Enya - Only Time (Pop Radio mix).m

2. 基於最後訪問時間列出文件

根據最後訪問時間(即文件最後訪問的時間,而不是修改的時間)在目錄中列出文件。

# ls -ltu

total 3084272
drwxr-xr-x  2 tecmint tecmint       4096 Jan 19 15:24 Music
drwxr-xr-x  2 tecmint tecmint       4096 Jan 19 15:22 Linux-ISO
drwxr-xr-x  2 tecmint tecmint       4096 Jan 19 15:22 Music-Player
drwx------  3 tecmint tecmint       4096 Jan 19 15:22 tor-browser_en-US
drwxr-xr-x  2 tecmint tecmint       4096 Jan 19 15:22 bin
drwxr-xr-x 11 tecmint tecmint       4096 Jan 19 15:22 Android Games
drwxr-xr-x  2 tecmint tecmint       4096 Jan 19 15:22 Songs
drwxr-xr-x  2 tecmint tecmint       4096 Jan 19 15:22 renamefiles
drwxr-xr-x  2 tecmint tecmint       4096 Jan 19 15:22 katoolin-master
drwxr-xr-x  2 tecmint tecmint       4096 Jan 19 15:22 Tricks
drwxr-xr-x  3 tecmint tecmint       4096 Jan 19 15:22 Linux-Tricks
drwxr-xr-x  6 tecmint tecmint       4096 Jan 19 15:22 tuptime
drwxr-xr-x  4 tecmint tecmint       4096 Jan 19 15:22 xdm
drwxr-xr-x  2 tecmint tecmint      20480 Jan 19 15:22 ffmpeg usage
drwxr-xr-x  2 tecmint tecmint       4096 Jan 19 15:22 xdm-helper

3. 基於最後修改時間列出文件

根據文件狀態信息的最後修改時間或'ctime'在目錄中列出文件。此命令將首先列出最近更改任何狀態信息的文件,例如:所有者、組、權限、大小等。

# ls -ltc

total 3084272
drwxr-xr-x  2 tecmint tecmint       4096 Jan 19 15:24 Music
drwxr-xr-x  2 tecmint tecmint       4096 Jan 19 13:05 img
-rw-------  1 tecmint tecmint     262191 Jan 19 12:15 tecmint.jpeg
drwxr-xr-x  5 tecmint tecmint       4096 Jan 19 10:57 Desktop
drwxr-xr-x  7 tecmint tecmint      12288 Jan 18 16:00 Downloads
drwxr-xr-x 13 tecmint tecmint       4096 Jan 18 15:36 VirtualBox VMs
-rwxr-xr-x  1 tecmint tecmint        691 Jan 13 14:57 special.sh
-rw-r--r--  1 tecmint tecmint     654325 Jan  4 16:55 powertop-2.7.tar.gz.save
-rw-r--r--  1 tecmint tecmint     654329 Jan  4 11:17 filename.tar.gz
drwxr-xr-x  3 tecmint tecmint       4096 Jan  4 11:04 powertop-2.7
-rw-r--r--  1 tecmint tecmint     447795 Dec 31 14:22 Happy-New-Year-2016.jpg
-rw-r--r--  1 tecmint tecmint         12 Dec 18 18:46 ravi
-rw-r--r--  1 tecmint tecmint       1823 Dec 16 12:45 setuid.txt
...

如果與上述命令一起使用'-a'開關,則它們可以列出並排序當前目錄中的隱藏文件,'-r'開關將以相反的順序列出輸出。

對於更深入的排序,例如在find命令的輸出上進行排序,但是ls也可以使用,但在這裡'sort'更有幫助,因為輸出可能不僅僅是文件名,還可以是用戶希望的任何字段。

以下命令展示了使用sort命令和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的輸出進行排序

此命令根據第6個字段按月份對'ls -l'命令的輸出進行排序,然後根據日期(第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命令有一些了解,您可以根據任何字段對幾乎任何列表進行排序,甚至是您想要的任何列。這些是一些幫助您根據日期或時間對文件進行排序的技巧。您可以根據這些技巧構建自己的技巧。但是,如果您有任何其他有趣的技巧,您可以在評論中提到。

Source:
https://www.tecmint.com/find-and-sort-files-modification-date-and-time-in-linux/