이 작업이 거의 끝났습니다. CRON에서 실행하여 마지막 10개의 백업을 유지하고 다른 항목을 삭제하는 스크립트입니다. 모든 것이 올바른지 확인하기 위해 추적하기 위해 기록하고 싶습니다. 작업하고 작성했습니다. 어떤 파일이 삭제되었는지, 안타깝게도 타임스탬프의 접두사를 설정할 수 없습니다.
TIMESTAMP=$(date +%d-%m-%Y-%H-%M-%S)
LOGFILE="/home/user/place/backups/backuplog.txt"
echo "$TIMESTAMP, " | ls -1tr | head -n -10 | xargs -d '\n' rm -f -v >> $LOGFILE
답변1
ts
다음 명령을 사용할 수 있습니다 .
ts [-r] [-i | -s] [format]
이와 같이:
TS_FORMAT="%d-%m-%Y-%H-%M-%S, "
LOGFILE="/home/user/place/backups/backuplog.txt"
ls -1tr | head -n -10 | xargs -d '\n' rm -f -v | ts "${TS_FORMAT}" >> $LOGFILE
ts
포함 된moreutils
팩.
업데이트: 추가 종속성을 설치할 필요가 없습니다.
다음을 다시 사용할 수 있습니다 xargs
.
TIMESTAMP=$(date +%d-%m-%Y-%H-%M-%S)
LOGFILE="/home/user/place/backups/backuplog.txt"
ls -1tr | head -n -10 | xargs -d '\n' rm -f -v | xargs -L 1 -d '\n' echo "${TIMESTAMP}, " >> $LOGFILE
또 다른 가능성은 다음을 사용하는 것입니다 sed
.
TIMESTAMP=$(date +%d-%m-%Y-%H-%M-%S)
LOGFILE="/home/user/place/backups/backuplog.txt"
ls -1tr | head -n -10 | xargs -d '\n' rm -f -v | sed "s/^/${TIMESTAMP}/" >> $LOGFILE
사용 awk
:
LOGFILE="/home/user/place/backups/backuplog.txt"
ls -1tr | head -n -10 | xargs -d '\n' rm -f -v | awk '{ print strftime("%d-%m-%Y-%H-%M-%S"), $0}' >> $LOGFILE
등.
답변2
나는 이 문제에 대해 루프 기반 접근 방식을 제안하고 싶지만(우리 모두는 한 줄짜리를 선호하지만) 읽기도 더 쉽습니다. 물론 CRON에서는 코드를 직접 실행하는 대신 이 스크립트 파일을 호출하면 됩니다.
strings=`ls -1tr | head -n -10`
for file in $strings; do
rmOutput=`rm -f -v $file`
echo `date +%d-%m-%Y-%M-%S`: $rmOutput >> $LOGFILE
done