BASH는 타임스탬프와 함께 rm의 출력을 어떻게 저장합니까?

BASH는 타임스탬프와 함께 rm의 출력을 어떻게 저장합니까?

이 작업이 거의 끝났습니다. 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

관련 정보