Files

刪除目錄中最舊的文件

  • February 5, 2021

我有一個正在執行的下載器(在 perl 中),它試圖執行 mv 系統命令。

mv的輸出

mv: cannot move `./PMC5318673/EXCLI-15-758.pdf' to `/directory/EXCLI-15-758.pdf': No space left on device

驅動器上有空間,但我相信這個文件夾已經用完了所有的 inode。

所以我們想出的解決方案是刪除目錄中最舊的文件並嘗試將文件移動到那裡,如果仍然沒有空間做 mv 刪除下一個最舊的文件。

我需要一個快速執行的系統命令。(ls 需要永遠,因為可能有數百萬個文件或更多??)可以刪除最舊的文件。同樣,這些文件有時也可能位於子文件夾中。

同樣,如果您能想到與刪除最舊文件不同的想法,請告訴我。

在 zsh 中:

rm -- **/*(.om[-1])

(或來自不同的外殼zsh -c 'rm -- **/*(.om[-1])':)

意思是:

  1. **/* 遞歸收集文件
  2. ( … ) 是一個zsh glob 限定符
  3. .意味著只考慮“普通”文件(而不是目錄等)
  4. om表示按修改時間排序
  5. -1表示只選擇最舊的文件

歸功於Gilles 的回答以獲得靈感

刪除最舊的文件

find . -name '*some-pattern*' -type f -printf '%T+ %p\n' | sort | head -n1 | awk '{print $2}' | xargs rm -v

此處的目的-name '*some_pattern*'是將匹配項限制為您要刪除的文件

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