SCRIPT : Purge file with bash

Hello,
There is a retention file app and a app to tag files and folders.
But i can’t make purge all users files EXCEPT for some users.
Maybe i miss something.
So i made a script in bash :
Maybe devs can translate it in php to make an app.
I do not support this script if you got issue.


#!/bin/bash
#### !!! BASH OBLIGATOIRE !!! ####
#######
# Script de purge nextcloud tous les mois (Ă  la bourrin)
#######

#############################
# EXCEPTIONS et VARIABLES
#############################

# Date
LAST_MONTH=`date +'%s' -d 'last month'`
# LAST_MONTH=`date +'%s' -d 'last minute'`

# Init
i=0
j=0

# Couleurs
# echo -e "I ${RED}love${NC} Stack Overflow"
NC='\033[0m' # No Color
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'

# Chemin source
SOURCE_PATH="/var/www/html/nextcloud/data"

# Exceptions
# Entrer les débuts d'adresse mail
# exemple : EXCEPT="'(t.oto|b.itch|s.uce).*'"
EXCEPT="'(t.oto).*'"

#################
# SCRIPT
#################

# On chope l'UID du user avec son adresse mail
# On se connecte à la base, on lance la requete et on entre le résultat dans un tableau
# Exception
mapfile -t USER_LIST < <(mysql -u root nextcloud -Bse "SELECT uid FROM oc_accounts WHERE DATA NOT REGEXP $EXCEPT COLLATE utf8_general_ci;")
# TEST Inversion exception
# mapfile -t USER_LIST < <(mysql -u root nextcloud -Bse "SELECT uid FROM oc_accounts WHERE DATA REGEXP $EXCEPT COLLATE utf8_general_ci;")

# On lit le tableau
for (( i=0; i<${#USER_LIST[@]}; i++ ))
	do 
	echo -e "${RED}${USER_LIST[i]}${NC}"
	# On chope le numéro de storage
	OC_STORAGE=`mysql -u root nextcloud -Bse "SELECT numeric_id FROM oc_storages WHERE id REGEXP '${USER_LIST[i]}'"`
	# echo $OC_STORAGE
	# On chope les noms de fichiers et les IDs et on les entre dans un tableau
	mapfile -t FILE_LIST_PATH < <(mysql -u root nextcloud -Bse "SELECT path,fileid FROM oc_filecache WHERE STORAGE='${OC_STORAGE}' AND NAME NOT IN  ('files','files_encryption','fileKey','cache','uploads','keys','files_trashbin','files_versions','versions','');")

	# On lit le nouveau tableau
	# Première boucle pour virer en base les fichiers et les partages
	for (( j=0; j<${#FILE_LIST_PATH[@]}; j++ ))
		do
		# echo ${FILE_LIST_PATH[j]}
		# Mise en variable des deux colonnes du tableau
		FILE_ID=`echo ${FILE_LIST_PATH[j]} | awk '{print $2}'`
		FILE_PATH=`echo ${FILE_LIST_PATH[j]} | awk '{print $1}'`
		# Comparaison des dates
		CREATE_TIME=`stat -c %W $SOURCE_PATH/${USER_LIST[i]}/$FILE_PATH`
		if [ "$LAST_MONTH" -gt "$CREATE_TIME" ]
			then
			echo -e "EFFACE BASE : ${GREEN}$SOURCE_PATH/${USER_LIST[i]}/$FILE_PATH${NC}"
			mysql -u root nextcloud -Bse "DELETE FROM oc_filecache WHERE path='${FILE_PATH}';"
		
			echo -e "EFFACE PARTAGE: ${GREEN}$SOURCE_PATH/${USER_LIST[i]}/$FILE_PATH${NC}"
			mysql -u root nextcloud -Bse "DELETE FROM oc_share WHERE file_source='${FILE_ID}';"
		
		fi	
		done
	
	# On relit le tableau
	# Seconde boucle pour effacer les fichiers (les erreurs sont normales, il arrive qu'on efface un répertoire parent avant).
	for (( j=0; j<${#FILE_LIST_PATH[@]}; j++ ))
		do
		# echo ${FILE_LIST_PATH[j]}
		FILE_PATH=`echo ${FILE_LIST_PATH[j]} | awk '{print $1}'`
		# Comparaison des dates
		CREATE_TIME=`stat -c %W $SOURCE_PATH/${USER_LIST[i]}/$FILE_PATH`
		if [ "$LAST_MONTH" -gt "$CREATE_TIME" ]
			then
			echo -e "EFFACE FICHIER: ${GREEN}$SOURCE_PATH/${USER_LIST[i]}/$FILE_PATH${NC}"
			rm -Rf $SOURCE_PATH/${USER_LIST[i]}/$FILE_PATH
		fi	
		done					
	done

This topic needn’t answer :wink: :gift:
Regards,
Alex.