J'essaie d'écrire un script qui calcule une taille de répertoire et si la taille est inférieure à 10 Go, et supérieure à 2 Go, effectuez une action. Où dois-je mentionner mon nom de dossier?
# 10GB
SIZE="1074747474"
# check the current size
CHECK="`du /data/sflow_log/`"
if [ "$CHECK" -gt "$SIZE" ]; then
echo "DONE"
fi
Tu peux faire:
du -h your_directory
ce qui vous donnera la taille de votre répertoire cible.
Si vous voulez une brève sortie, du -hcs your_directory
est Nice.
si vous voulez seulement voir la taille du dossier et pas les sous-dossiers, vous pouvez utiliser:
du -hs /path/to/directory
Mise à jour:
Vous devez savoir que du
indique l'espace disque utilisé; et non la taille du fichier.
Vous pouvez utiliser --apparent-size
si vous voulez voir la somme des tailles de fichier réelles.
--apparent-size
print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be larger due to holes in ('sparse')
files, internal fragmentation, indirect blocks, and the like
Et bien sûr, il n’est pas nécessaire d’utiliser l’option -h
(lisible par l’homme) dans un script.
Au lieu de cela, vous pouvez utiliser -b
pour faciliter la comparaison dans le script.
Mais vous devriez noter que -b
applique --apparent-size
par lui-même. Et ce n'est peut-être pas ce dont vous avez besoin.
-b, --bytes
equivalent to '--apparent-size --block-size=1'
donc je pense que vous devriez utiliser --block-size
ou -B
#!/bin/bash
SIZE=$(du -B 1 /path/to/directory | cut -f 1 -d " ")
# 2GB = 2147483648 bytes
# 10GB = 10737418240 bytes
if [[ $SIZE -gt 2147483648 && $SIZE -lt 10737418240 ]]; then
echo 'Condition returned True'
fi
Utilisez un résumé (-s
) et des octets (-b
). Vous pouvez couper le premier champ du résumé avec cut
. Mettre tous ensemble:
CHECK=$(du -sb /data/sflow_log | cut -f1)
Pour obtenir juste la taille du répertoire, rien de plus:
du --max-depth=0 ./directory
la sortie ressemble à
5234232 ./directory
si vous voulez seulement voir la taille globale du dossier et probablement au format MB ou GB, veuillez essayer le script ci-dessous
$du -s --block-size=M /path/to/your/directory/
Pour vérifier la taille de tous les répertoires d’un répertoire, vous pouvez utiliser:
du -h --max-depth=1
# 10GB
SIZE="10"
# check the current size
CHECK="`du -hs /media/662499e1-b699-19ad-57b3-acb127aa5a2b/Aufnahmen`"
CHECK=${CHECK%G*}
echo "Current Foldersize: $CHECK GB"
if (( $(echo "$CHECK > $SIZE" |bc -l) )); then
echo "Folder is bigger than $SIZE GB"
else
echo "Folder is smaller than $SIZE GB"
fi
Si cela vous aide, vous pouvez également créer un alias dans votre .bashrc
ou .bash_profile
.
function dsize()
{
dir=$(pwd)
if [ "$1" != "" ]; then
dir=$1
fi
echo $(du -hs $dir)
}
Ceci affiche la taille du répertoire actuel ou du répertoire que vous avez passé en argument.