find 명령을 에코하는 방법

find 명령을 에코하는 방법

라즈베리 백업 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

findfprintfind 명령의 결과를 파일에 쓰는 작업이 있습니다 . 그런 다음 명령을 다음과 같이 확장할 수 있습니다.

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

관련 정보