Svuotare I Cestini Di Tutti Gli Utenti
Autotrash
Autotrash e' uno script che vi permette di tenere sotto controllo i cestini di tutti gli utenti o solo il vostro. Autotrash è su github qui: https://github.com/bneijt/autotrash
Per installarlo vi basta mandare in esecuzione i seguenti comandi:
$ sudo apt-get install pipx $ pipx install autotrash $ sudo ln -s ~/.local/pipx/venvs/autotrash/bin/autotrash /bin/autotrash
A questo punto se volete controllare che il cestino di ogni utente non superi 1Gb vi basta mettere in /etc/cron.daily un file eseguibile (autotrashdaily) con questo contenuto:
#!/bin/bash /usr/bin/autotrash -td 30 --trash_limit 1000
in questo modo vi cancella i file che riempiono il cestino, cancellando i più vecchi, in modo che il cestino di ogni utente non sia maggiore di 1Gb. E' obbligatori indicare di quanti giorni devono almeno essere vecchi i file prima di cancellarli, una buona abitudine e mettere 30 giorni; in questo modo si evitano cancellazioni di file inviati per sbaglio al cestino.
Ci sono tante altre opzioni disponibili che sono spiegate nel manuale qui: https://github.com/bneijt/autotrash/blob/main/doc/autotrash.md
Per controllare solo il vostro cestino vi basta il comando
$ autotrash -d 30 --trash_limit 1000
Vecchia soluzione
Prima di autotrash avevo scritto il seguente script che permette di impostare quanto spazio concedere al cestino di ogni utente, e ripulirlo quando supera una certa dimensione.
Prima di tutto bisogna mettere questo script e chiamarlo delete_spaces.pl, metterlo in /usr/bin/:
#! /usr/bin/perl use File::Find; finddepth sub { # finddepth so directories are done AFTER their contents my $old = $_; tr/ /_/ or return; # don't do anything if you don't have spaces -e and return; # don't rename over an existing file! rename $old, $_ or warn "cannot rename $old to $_: $!"; }, "."; # starting directory
Spero possa essere utile a qualcuno, consiglio di metterlo in "/etc/cron.daily/" e renderlo eseguibile:
#! /bin/bash
# By in orginal idea of Frederic Connes
#This is a cript to mantain all Trash directories below the maximum granted by System Administrator
#released on GPL v.2 by Massimiliano Vessi (maxint@tiscali.it)
######################################################################
# Configuration #
# #
#Answer following question: #
######################################################################
#Where is local Trash in user home directory? #
trash=".local/share/Trash/files"
##########################################################################
#How much space you permit on Trash? (uncomment only the correct one) #
# 1 byte
#limit=1
#1kB
#limit=1024
#1MB
#limit=1048576
# 1GB
# limit=1073741824
# 10GB
# limit=10737418240
# 100GB
limit=107374182400
#######################################################################
#Where store temporary files? #
tmp_file=/tmp/svuota
tmp_file2=/tmp/svuota2
tmp_file3=/tmp/svuota3
users_file=/tmp/users_list
########################End Configuration##############################
#echo "Cleaning all user trashcans" > /dev/pts/0
#Create a file with all users
cut -f 1 -d : /etc/passwd > $users_file
for user in `cat $users_file`
do
#Do user's trash exist?
if [ -d "/home/$user/$trash" ] ; then
#here start the hard work
cd /home/$user/$trash
#Remove spaces in name files
/usr/bin/delete_spaces.pl
#Evaluate total space used by trash files
totalspace=`du -b -s | cut -f 1 `
if [ $totalspace -gt $limit ] ; then
#Let's create files list, ordering for time in reverse order (younger on top, older on bottom)
find -type f -printf "%T@ p\n" > $tmp_file
sort -g -r $tmp_file > $tmp_file2
#first a backup, something could go wrong
cp $tmp_file2 $tmp_file
#Initializing some variables
dim_total=0
lines_count=0
#Now count lines in our files list
lines_total=`wc -l $tmp_file |cut -f 1 -d \ `
#It isn't difficult: a new files list is created with all oldest files wich total exceed our limit (my english is awful... I know...)
while [ $dim_total -lt $limit ]
do
#read first line of new list
first_line=`head -n 1 $tmp_file2`
#read file dimension, remeber: "cut" field separator is space "\ "
dim_file=` echo $first_line | cut -f 2 -d \ `
#How much space, all file read untill now, use?
dim_total=`expr $dim_total + $dim_file`
#new list becomes shorter of 1 line (his first line)
lines_total=`expr $lines_total - 1`
tail -n $lines_total $tmp_file > $tmp_file2
done
#Now we have a new list with all file in exceed
cut -f 3 -d \ $tmp_file2 > $tmp_file3
#So, let's eliminate forever them
for file in `cat $tmp_file3`
do
rm -f $file
done
for file in `find -type d`
do
rmdir $file 2> /dev/null
done
fi
fi
done