Linux

用於從文件夾中刪除最舊文件的 Bash 腳本

  • February 8, 2018

我想製作一個 bash 腳本來刪除文件夾中的舊文件。每次我執行腳本時,只會刪除一個文件,即較舊的文件。你能幫我解決這個問題嗎?謝謝

正如科斯指出的那樣,可能無法知道最舊的文件(根據創建日期)。

如果修改時間對您有利,並且文件名沒有新行:

rm "$(ls -t | tail -1)"

看起來您可以刪除最舊的修改文件而不是最舊的創建文件;

我認為這是最安全的方法,因為它不會破壞包含換行符的文件名:

stat --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm
  • stat --printf='%Y %n\0' *:列印最後修改時間的 NUL 分隔列表,後跟目前工作目錄中每個文件的文件路徑;
  • sort -z: 使用 NUL 作為行分隔符對列表進行排序;
  • sed -zn '1s/[^ ]\{1,\} //p':從第一個以 NUL 結尾的行中刪除包含一個或多個字元而不是空格後跟空格的字元串的第一次出現並列印它;
  • xargs -0 rm: 將 NUL 終止的行rm作為參數傳遞給;
% touch file1
% touch file2
% stat -c '%Y %n' *            
1447318965 file1
1447318966 file2
% stat --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm 
% ls
file2

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