Linux

根據文件名作為日期刪除超過 30 天的文件

  • January 17, 2021

如果我有一個文件文件夾,其文件名作為它們的創建日期:

2019_04_30.txt
2019_04_15.txt
2019_04_10.txt
2019_02_20.txt
2019_01_05.txt

我如何將文件名與今天的目前日期進行比較

$ date "+%Y_%m_%d"
>>> 2019_04_30

如果文件名日期大於 30 天,則將其刪除。我希望最終得到

2019_04_30.txt
2019_04_15.txt
2019_04_10.txt

我不必遵循這個命名約定,我可以使用更合適的日期格式。

這是一個 bash 解決方案。

f30days=$(date +%s --date="-30 days")
for file in 20*.txt; do
   fdate=$(echo $file | tr _ -)
   fsec=$(date +%s --date=${fdate/.txt/})
   if [[ $fsec -lt $f30days ]]; then
       echo "rm $file"
   fi
done

我用“ echo rm $file”結束了它,而不是真正刪除你的文件,這將在之前測試結果。

zsh

zmodload zsh/datetime
strftime -s start '%Y_%m_%d.txt' $((EPOCHSECONDS - 30*86400))
echo -E rm -i 2*.txt(e:'[[ $REPLY > $start ]]':)

echo -E開心的時候去掉。

在 GNU 系統和 GNU shell ( bash) 上,您可以執行以下操作:

start=$(date -d '30 days ago' +%Y_%m_%d.txt)
list=()
shopt -s nullglob
for file in 2*.txt; do
 [[ $file > $start ]] && list+=("$file")
done
if (( ${#list[@]} > 0)); then
 echo -E rm -i "${list[@]}"
fi

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