Notă: Deși există un răspuns de la Jeff-Schaller, depinde de zsh
; așa că aș dori să obțin un răspuns bazat pe Bash
.
Îmi place să creez un script Bash pentru a șterge condiționat fișierele mai vechi dintr-un director de rezervă.
Există 2 condiții pentru 2 copii de siguranță ale fișierelor distincte:
1, Păstrați cea mai recentă copie a Edge_Profile_*.tgz
și ștergeți restul Edge_Profile_*.tgz
numai dacă au mai mult de 5 zile.
2, Păstrați cea mai recentă copie a Firefox_Profile_*.tgz
și ștergeți restul Firefox_Profile_*.tgz
, nu contează câți ani au.
Iată cum am modificat acest răspuns AskUbuntu: https://askubuntu.com/a/933098/928088
Scenariul:
#!/bin/bash
LOG_FILE="/home/admn/Cleanup.log"
TEMP_LOG="/tmp/Temp_Cleanup.log"
mv $LOG_FILE $TEMP_LOG
{
cd /home/admn/Downloads/Test;
echo „Jurnal de curățare:” `data`
găsiți /home/admn/Downloads/Test/Edge_Profile_*.tgz -type f \( -mtime +5 -printf 'Y\t' -o -printf 'N\t' \) -printf '%A@\t% p\0' |
sortare -zk2,2 | cap -zn -1 | în timp ce se citește -r -d '' flag _ fișier; face \
cazul „$flag” în
„Y”) echo rm „$fișier”
;;
*) echo „sare peste $fișier (prea nou)”
;;
esac;
Terminat
ecou
găsiți /home/admn/Downloads/Test/Firefox_Profile_*.tgz -type f \( -printf 'Y\t' -o -printf 'N\t' \) -printf '%A@\t%p\0' |
sortare -zk2,2 | cap -zn -1 | în timp ce se citește -r -d '' flag _ fișier; face \
cazul „$flag” în
„Y”) echo rm „$fișier”
;;
*) echo „sare peste $fișier (prea nou)”
;;
esac
Terminat
} &>> $LOG_FILE
cat $TEMP_LOG >>$LOG_FILE
Ieșire;
Ieșire în fișierul jurnal cu ecou
:
/usr/local/scripts/cleanup.sh
rm /home/admn/Downloads/Test/Edge_Profile_Jul_06_2021_00-35.tgz
rm /home/admn/Downloads/Test/Edge_Profile_Jul_07_2021_00-35.tgz
....
se omite /home/admn/Downloads/Test/Edge_Profile_Jul_12_2021_00-35.tgz (prea nou)
se omite /home/admn/Downloads/Test/Edge_Profile_Jul_13_2021_00-35.tgz (prea nou)
....
rm /home/admn/Downloads/Test/Firefox_Profile_Jul_01_2021_00-35.tgz
rm /home/admn/Downloads/Test/Firefox_Profile_Jul_02_2021_00-35.tgz
....
Ieșire în fișierul jurnal în timp ce rulează efectiv scriptul, fără ecou
:
/home/admn/Downloads/cleanup.sh: linia 24: se omite /home/admn/Downloads/Test/Edge_Profile_Jul_12_2021_00-35.tgz (prea nou): nu există un astfel de fișier sau director
/home/admn/Downloads/cleanup.sh: linia 24: se omite /home/admn/Downloads/Test/Edge_Profile_Jul_13_2021_00-35.tgz (prea nou): nu există un astfel de fișier sau director
....
Total fișiere din director: 20 fișiere
1, Edge_Profile_*.tgz: Din 06 iulie până pe 17 iulie: 12 fișiere
2, Firefox_Profile_*.tgz: Din 01 iulie până în 08 iulie: 8 fișiere
Problemele:
(1) I gândi scriptul funcționează, dar nu sunt sigur, deoarece am modificat cea mai mare parte fără să știu ce se întâmplă.
(2) Ieșire în fișierul jurnal:
Aș prefera exact aceeași ieșire în fișierul jurnal pe care îl primesc ecou
, cu excepția doar a numelor de fișiere (nu cu calea completă), cum ar fi:
rm Edge_Profile_Jul_11_2021_00-35.tgz
se omite Edge_Profile_Jul_12_2021_00-35.tgz (prea nou)
OS: Ubuntu MATE 21.04
Mulțumesc mult.