라즈베리 백업 bash 스크립트의 경우 삭제된 이전 백업과 삭제된 이전 백업 수를 기록하고 싶습니다.
나는 사용한다
find $backup_path/$HOSTNAME.*.img -mtime +$retention_days -type f -delete
깨끗한.
삭제된 파일을 계산, 표시 및 기록하는 방법은 무엇입니까?
답변1
-print
, 옵션을 사용 find
하여 삭제된 파일을 출력한 다음 tee
결과를 로그 파일로 파이프할 수 있습니다. 마지막으로 삭제된 파일의 줄 수를 계산하여 로그 파일에 추가합니다.
find $backup_path/$HOSTNAME.*.img -mtime +$retention_days -type f -delete -print | tee ${LOGFILE} | wc -l | xargs echo "Files deleted:" >> ${LOGFILE}
동일한 결과에 새 결과를 추가하려면 ${LOGFILE}
를 사용해야 합니다 tee -a
.
답변2
find
fprint
find 명령의 결과를 파일에 쓰는 작업이 있습니다 . 그런 다음 명령을 다음과 같이 확장할 수 있습니다.
find $backup_path/$HOSTNAME.*.img -mtime +$retention_days -type f -fprint /path/to/log.txt -delete
그런 다음 다음 명령을 사용하여 로그 파일에서 파일 수를 검색할 수 있습니다 wc
.
cat /path/to/log.txt | wc -l
검색 결과에 특수 문자가 나타날 가능성이 있는 경우 이 fprint0
옵션을 대안으로 사용할 수 있습니다. 결과는 지정된 파일에 null로 구분된 문자열로 기록됩니다.
결과 파일의 항목 수를 계산하려면 다음 질문에서 설명하는 옵션을 확인하세요.파일에서 빈으로 구분된 항목 수 계산.
답변3
파일 이름에 개행 문자가 있을 수 있는 경우( touch /the/path/$'foo\nbar'
예제 만들기) GNU find의 -fprintf
기능을 사용하여 파일 이름을 로그 파일에 인쇄하고 각 파일 이름에 대한 점을 별도의 로그 파일에 인쇄할 수 있으므로 혼동을 피할 수 있습니다. 도트 파일의 바이트 수는 일치하는 파일 수와 동일하며 파일 이름 자체는 별도의 파일에 저장됩니다.
find "$backup_path"/"$HOSTNAME".*.img -mtime +"$retention_days" -type f \
-fprintf ./deleted-files '%p\n' \
-fprintf ./count-files '.' \
-delete
-fprintf
위에서는 이전 필터 조건 -mtime
바로 뒤 -type f
와 바로 앞에 이 두 명령문을 구체적으로 배치하여 필요할 때만 트리거되도록 -delete
했습니다 .-delete
첫 번째 새 문은 파일의 파일 경로를 인쇄하고 ./deleted-files
, 두 번째 문은 ./count-files
삭제된 파일 로그를 찾아 삭제된 파일 이름을 찾아 wc -c < count-files
삭제된 파일의 총 개수를 보고하는 데 사용할 수 있습니다. -fprintf
파일 이름은 실행될 때마다 덮어쓰여집니다.
답변4
다음 명령을 사용하면 동일한 효과를 얻을 수 있습니다
find $backup_path/$HOSTNAME.*.img -mtime +$retention_days -type f -exec rm -rvf {} \; >log_file ===> This will delete and writes to logfile which are the files getting deleted
wc -l log_file===> will display count of files which are deleted