web-dev-qa-db-fra.com

Vérifier la taille du dossier dans Bash

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
272
tom

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.

536
Mingyu

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
128
Taxellool

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)
25
paddy

Pour obtenir juste la taille du répertoire, rien de plus:

du --max-depth=0 ./directory

la sortie ressemble à

5234232       ./directory
23
siliconrockstar

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/
11
Shivraaz

Pour vérifier la taille de tous les répertoires d’un répertoire, vous pouvez utiliser:

du -h --max-depth=1

4
# 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
3
Gutz-Pilz

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.

3
Vignesh Raja