Find

如何在unix中查找和刪除早於特定日期的文件?

  • November 17, 2021

我有一個日誌文件夾,裡面有 7 個文件夾。這七個文件夾中也有子文件夾,這些子文件夾也有子文件夾。我想刪除所有文件夾中所有超過 15 天的文件,包括子文件夾,而不觸及文件夾結構,這意味著只有文件。

mahesh@inl00720:/var/dtpdev/tmp/ > ls
A1  A2  A3  A4  A5  A6  A7

mahesh@inl00720:/var/dtpdev/tmp/A1/ > ls
B1 B2 B3 B4 file1.txt file2.csv

你可以先說find /var/dtpdev/tmp/ -type f -mtime +15。這將找到所有超過 15 天的文件並列印它們的名稱。或者,您可以-print在命令末尾指定,但這是預設操作。建議先執行上述命令,看看選擇了哪些文件。

在您確認該find命令列出了您要刪除的文件(而不是其他文件)後,您可以添加一個“操作”來刪除這些文件。執行此操作的典型操作是:

  1. -exec rm -f {} \;(或者,等效地,-exec rm -f {} ';'

這將rm -f在每個文件上執行;例如,

rm -f /var/dtpdev/tmp/A1/B1; rm -f /var/dtpdev/tmp/A1/B2; rm -f /var/dtpdev/tmp/A1/B3; …
  1. -exec rm -f {} +

這將同時rm -f在許多文件上執行;例如,

rm -f /var/dtpdev/tmp/A1/B1 /var/dtpdev/tmp/A1/B2 /var/dtpdev/tmp/A1/B3 …

所以它可能比選項 1 稍微快一點。(rm -f如果你有數千個文件,它可能需要執行幾次。) 3. -delete

這告訴find自己刪除文件,而不執行rm. 這可能比變體快得多-exec,但它不適用於所有系統。

因此,如果您使用選項 2,則整個命令將是:

find /var/dtpdev/tmp/ -type f -mtime +15 -exec rm -f {} +

引用自:https://unix.stackexchange.com/questions/155184