The only way I can think of is to use the API to get all communities, and then filter out the ones without local subs. So a basic BASH script would be:
#!/bin/bash
echo -n '' > /tmp/allcomms.txt
page=1
while true
do
communities=$(curl --request GET --url "https://walledgarden.xyz/api/v3/community/list?type_=All&page=%24%7Bpage%7D&limit=50" --header 'accept: application/json' | jq .communities[])
if [ "${communities}" == "" ]
then
break
fi
jq -r '[.community.id, .counts.subscribers_local] | @sh' <<<$communities >> /tmp/allcomms.txt
page=$(( page + 1 ))
sleep .5
done
while read id count
do
if [ $count -eq 0 ]
then
echo "$id has no local subs"
fi
done < /tmp/allcomms.txt
(It'll take a few minutes to run)
After that, how you purge the communities with those IDs I'm less sure of. My guess would be:
Get a login tokin:
JWT=$(curl --request POST --url https://walledgarden.xyz/api/v3/user/login --header 'accept: application/json' --header 'content-type: application/json' --data '{"username_or_email": "YOUR_USERNAME","password": "YOUR_PASSWORD"}' | jq -r .jwt)
Use Admin/Purge from the API:
curl --request POST --url https://walledgarden.xyz/api/v3/admin/purge/community --header "authorization: Bearer $JWT" --header 'content-type: application/json' --data "{"community_id": ${id}, "reason": "no local subs"}"
As long as purge lets the community be recreated again (which it should do), then that should be okay.
Don't take my word for any of this for an in-production Lemmy server, though. Test first!