8

I have searched around but not found a possible solution to this so far. I have an ongoing scan which I thought would've been finished at certain time, but unfortunately it has not. So I am wondering if there's a way to check the scan progress of this ongoing progress.

Dark Star1
  • 1,465

4 Answers4

7

AFAICT, this is not possible—you can either have all scanned files printed to the console, or just print infected files. Then at the end, ClamAV will print a summary. I haven't been able to find a way to get any ongoing statistics.

The only way I could imagine hacking it to do this would be:

  1. First, count all files recursively in the directory(ies) that will be scanned by ClamAV, then store that number in a variable.
  2. Run ClamAV wrapped in a script that counts the lines output, and compares that to the count from step 1.

I tried doing this quickly one time, but couldn't get it working well enough for an automated Jenkins job I set up... so I eventually gave up on it. Sorry :(

geerlingguy
  • 1,377
1

This is an old, answered thread but I wanted to try geerlingguy's idea (whom I am a fan :-)) and in case others end up here provide a codified solution.

If you want to scan the folder foo for example, you start the scan with:

clamscan -r foo | tee /tmp/scan.log

or

clamscan -r foo > /tmp/scan.log

You can then run the following script with the arguments of the folder being scanned and the log file, in this example

status.sh foo /tmp/scan.log

Where the contents of the status.sh file is:

#!/bin/bash
folder=$1
log=$2
numFiles=`find $folder -type f | wc -l` 
echo $numFiles files to be processed

numProcessed=`wc -l $log | awk '{print $1'}`
percent=`echo "scale=2;$numProcessed*100./$numFiles." | bc`
echo $percent percent complete.

One could combine running of the scan and checking the status into a single script if needed.

suleyman
  • 125
1

While this is an old thread I still wanted to share my solution using pipeviewer (pv) here:

dir="./Downloads"; clamscan --recursive $dir | pv --line-mode -s $(find "$dir" -type f | wc -l) > /dev/null
0

I use the -i option (Only print infected files.) of clamscan, so I get output only when an infected file is found.

For checking on which file clamscan is currently working, you can use:

lsof -a -d 0-999 -c clamscan /

The lsof options have been taken from https://serverfault.com/a/106408/508349