Linux
根據文件名作為日期刪除超過 30 天的文件
如果我有一個文件文件夾,其文件名作為它們的創建日期:
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