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
Regards,
Alex.