Linux 技巧:依檔案新舊列出檔案

簡介

你是否曾想過,如何在一個目錄中找到那些很久都沒有動過的檔案?無論你是在清理舊檔案、歸檔資料,還是檢查過期檔案,Linux 的find命令就是你的首選解決方案。在本技巧中,我們將展示如何使用一個簡單而強大的命令,依檔案新舊列出 Linux 中的檔案。


命令

find /path/to/files -type f -name '*.jpg' -mtime +30 -exec ls -l {} \;

透過這個命令,你可以根據檔案的最後修改日期找到檔案,依類型或名稱篩選檔案,並顯示檔案的詳細資訊。


逐項解析

1. /path/to/files

它指定要搜尋的目錄。請將其替換為你想瀏覽的實際資料夾路徑。

  • 範例:如果你想搜尋你的相片庫,請使用~/Pictures.

2. -type f

-type選項會指定要搜尋的項目類型。

  • f:僅指檔案(忽略目錄)。

3. -name '*.jpg'

它會根據檔案名稱或副檔名篩選結果。

  • 範例:*.jpg會尋找以.jpg.
  • 你可以將其替換為其他模式,例如*.txt表示純文字檔案,*.log表示記錄檔。

4. -mtime +30

這是依檔案新舊篩選檔案的關鍵。

  • +30:尋找 30 天前最後修改過的檔案。
  • 將30替換為任意數字,以符合你的需求:
    • 1 年:使用-mtime +365.
    • 1 週:使用-mtime +7.

5. -exec ls -l {} \;

它告訴 Linux 如何處理找到的檔案。

  • -exec:對每個檔案執行一個命令。
  • ls -l:列出每個檔案的詳細資訊(例如大小、權限、擁有者和最後修改日期)。
  • {}:找到的每個檔案的預留位置。
  • \;:表示命令結束。

專業提示

想在不執行ls -l的情況下測試命令?省略-exec部分:

find /path/to/files -type f -name '*.jpg' -mtime +30

這樣只會列出檔案路徑,不會顯示其他詳細資訊。


為什麼使用這個命令?

find命令用途非常廣泛,對系統維護任務非常有用:

  • 釋放磁碟空間:找出並刪除舊檔案。
  • 歸檔較早的資料:將數月或數年未動過的檔案移至備份儲存空間。
  • 監控過期檔案:檢查重要目錄中的過期檔案。

實際範例

範例 1:尋找舊文件

搜尋.docx檔案。目標資料夾:Documents,尋找超過 90 天未修改的檔案:

find ~/Documents -type f -name '*.docx' -mtime +90 -exec ls -l {} \;

範例 2:尋找超過 6 個月的大型檔案

尋找大於 100MB 的檔案,位置:/home/user,尋找超過 6 個月未修改的檔案:

find /home/user -type f -size +100M -mtime +180 -exec ls -lh {} \;
  • -size +100M:篩選大於 100MB 的檔案。
  • ls -lh:以人類可讀的格式顯示檔案大小(例如 MB、GB)。

範例 3:搜尋舊 PDF 檔案

尋找.pdf檔案,位置:/home/user/Downloads,尋找最近一年內未修改的檔案:

find ~/Downloads -type f -name '*.pdf' -mtime +365 -exec ls -l {} \;

範例 4:尋找最近修改過的檔案

搜尋.txt檔案,尋找最近 7 天內修改過的檔案,位置:/var/www:

find /var/www -type f -name '*.txt' -mtime -7 -exec ls -l {} \;
  • -mtime -7:尋找最近 7 天內修改過的檔案。

範例 5:刪除舊暫存檔案

刪除以下位置的檔案:/tmp中超過 30 天未修改的檔案:

find /tmp -type f -mtime +30 -exec rm {} \;
  • rm:刪除檔案。
  • 警告:請謹慎使用,因為這會永久刪除檔案。

範例 6:歸檔舊媒體檔案

移動.mp4檔案(超過 60 天),來源資料夾:~/Videos,目標為歸檔資料夾:

find ~/Videos -type f -name '*.mp4' -mtime +60 -exec mv {} ~/Archives/ \;
  • mv:將檔案移至指定的資料夾。

範例 7:尋找在特定時間範圍內建立的檔案

搜尋.log檔案,尋找 30 到 60 天前建立的檔案,位置:/var/log:

find /var/log -type f -name '*.log' -mtime +30 -mtime -60 -exec ls -l {} \;
  • -mtime +30:超過 30 天的檔案。
  • -mtime -60:最近 60 天內修改過的檔案。

範例 8:尋找超過 1 週的空白檔案

尋找以下位置的空白檔案:/home/user中最近一週未修改的檔案:

find /home/user -type f -empty -mtime +7 -exec ls -l {} \;
  • -empty:篩選大小為零的檔案。

範例 9:依存取時間搜尋檔案

尋找.png檔案,位置:/var/www/html,尋找最近 90 天內未存取過的檔案:

find /var/www/html -type f -name '*.png' -atime +90 -exec ls -l {} \;
  • -atime:依存取時間而非修改時間篩選檔案。

範例 10:尋找最近建立的檔案

尋找以下位置的檔案:/home/user中最近 3 天內建立的檔案:

find /home/user -type f -ctime -3 -exec ls -l {} \;
  • -ctime:依建立時間篩選檔案。

範例 11:依權限尋找檔案

搜尋以下位置的檔案:/etc中具有特定權限的檔案(例如,可被其他人寫入):

find /etc -type f -perm /o+w -exec ls -l {} \;
  • -perm /o+w:尋找可被其他人寫入的檔案。

範例 12:尋找最近一小時內修改過的檔案

尋找以下位置中最近一小時內修改過的檔案:/home/user/Documents:

find ~/Documents -type f -mmin -60 -exec ls -l {} \;
  • -mmin -60:篩選最近 60 分鐘內修改過的檔案。

範例 13:尋找具有特定擁有權的檔案

搜尋屬於以下使用者的檔案:jose,位置:/var/log中超過 90 天未修改的檔案:

find /var/log -type f -user jose -mtime +90 -exec ls -l {} \;
  • -user jose:篩選屬於指定使用者的檔案。

範例 14:排除特定目錄

尋找.jpg檔案,位置:/home/user中超過 30 天的,排除Downloads資料夾:

find /home/user -type f -name '*.jpg' -mtime +30 -not -path "~/Downloads/*" -exec ls -l {} \;
  • -not -path:排除指定目錄中的檔案。

範例 15:尋找在特定日期修改過的檔案

搜尋以下位置中正好 10 天前修改過的檔案:/home/user:

find /home/user -type f -mtime 10 -exec ls -l {} \;
  • -mtime 10:尋找正好 10 天前修改過的檔案。

範例 16:尋找具有特定副檔名的檔案

搜尋.zip和.tar.gz檔案,尋找超過 60 天的檔案,位置:/backups:

find /backups -type f \( -name '*.zip' -o -name '*.tar.gz' \) -mtime +60 -exec ls -l {} \;
  • \( -name '*.zip' -o -name '*.tar.gz' \):搜尋多個檔案副檔名。

結論

Linux 的find命令是根據檔案的新舊、類型和名稱管理檔案的強大工具。無論你是在清理磁碟空間、歸檔舊資料,還是監控過期檔案,此命令都能讓你完全掌控自己的目錄。

今天就試試它,讓你的 Linux 技能更上一層樓!

發表留言