J'écris un petit petit script pour dégager l'espace de mon Linux tous les jours via Cron si le répertoire de cache pousse trop grand. Depuis que je suis vraiment vert chez Bash Scripting, j'aurai besoin d'un peu d'aide de votre gourus Linux.
Voici essentiellement la logique (pseudo-code) p> Je prévois d'obtenir l'espace de conduite à partir de la commande '/ dev / sda5'.
Si vous renvoie la valeur suivante pour que votre information: p> donc une petite regex peut être nécessaire pour obtenir le "11330252" de la valeur renvoyée p> le 'if (actuel répertoire de travail = / home / utilisateur / lotsa_cache_files /)' est juste un mécanisme défensif de la paranoïa en moi. Je veux m'assurer que je suis en effet dans '/ home / utilisateur / lotsa_cache_files /' avant de procéder à la commande DELETE qui est potentiellement destructive si le répertoire de travail actuel n'est pas présent pour une raison quelconque. P> La suppression des fichiers sera effectuée avec la commande ci-dessous au lieu de la RM habituelle: p> Ceci est dû à l'incapacité inhérente à Linux systèmes à "RM" un répertoire s'il contient trop de fichiers, comme je l'ai appris dans le passé. p> p> Une petite paranoïa h1>
Suppression de fichiers h1>
5 Réponses :
Pour détecter l'occupation d'un système de fichiers, j'utilise ceci:
pushd '/home/user/lotsa_cache_files/' do the stuff popd
Je le ferais de cette façon:
C'est ce que j'allais recommander: Code dure le répertoire de la commande code> code> et n'utilisez pas Xargs car il peut être dangereux.
Une autre proposition (commentaires sous Code): appelez le script de crontab pour effectuer des nettoyages planifiés p> p>
Je suggère d'utiliser le drapeau -Delete code> au lieu de -exec rm -f {} \; code>. Envisagez également d'ajouter -XDev code> comme premier drapeau à rester dans le même système de fichiers.
Voici le script que j'utilise pour supprimer d'anciens fichiers dans un répertoire pour libérer de l'espace ...
#!/bin/bash
#
# prune_dir - prune directory by deleting files if we are low on space
#
DIR=$1
CAPACITY_LIMIT=$2
if [ "$DIR" == "" ]
then
echo "ERROR: directory not specified"
exit 1
fi
if ! cd $DIR
then
echo "ERROR: unable to chdir to directory '$DIR'"
exit 2
fi
if [ "$CAPACITY_LIMIT" == "" ]
then
CAPACITY_LIMIT=95 # default limit
fi
CAPACITY=$(df -k . | awk '{gsub("%",""); capacity=$5}; END {print capacity}')
if [ $CAPACITY -gt $CAPACITY_LIMIT ]
then
#
# Get list of files, oldest first.
# Delete the oldest files until
# we are below the limit. Just
# delete regular files, ignore directories.
#
ls -rt | while read FILE
do
if [ -f $FILE ]
then
if rm -f $FILE
then
echo "Deleted $FILE"
CAPACITY=$(df -k . | awk '{gsub("%",""); capacity=$5}; END {print capacity}')
if [ $CAPACITY -le $CAPACITY_LIMIT ]
then
# we're below the limit, so stop deleting
exit
fi
fi
fi
done
fi
S'il vous plaît vérifier à nouveau le code! Il semble que cela supprimerait des fichiers dans le dossier actuel.
@Max il fait cd $ dir code> donc ce ne sera pas.
Voici ce que je fais: p>
en lecture f; faire rm -rf $ {f}; fait
"Incapacité inhérente des systèmes Linux à" RM "un répertoire s'il contient trop de fichiers" cela implique également "RM -RF"?