Bash : soucis de formatage de date + question

Résolu
Lucas -  
 Lucas -
Bonjour,

Dans le cadre d'un projet scolaire je dois réaliser un petit script permettant de faire le backup d'une partition sur un support amovible USB.
Je dois inclure la date et l'heure du jour dans le nom du fichier, et le formatage suivant ne fonctionne pas :
fileDate='date '+%d.%m.%Y_%H:%M:%S''

Avez-vous une petite idée sur l'erreur ? =)

Sinon comme le support de destination est variable, j'aimerais pouvoir récupérer le nom de sa partition (/dev/xxx) afin de pouvoir récupérer l'espace disque restant et ainsi pouvoir comparer avec la taille de l'archive pour permettre ou non le backup. Voici la commande que je souhaite utiliser pour cela :
freeSpace=$(df /dev/sdxx | awk  '/sdxx/ {print $4}'


Existe-t-il un moyen de récupérer cette information si par exemple on se place dans le support amovible via un cd ? Ou alors avez-vous une alternative ?

Merci de votre aide et bonne journée

3 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    La syntaxe pour exécuter une commande est :

    $(commande)

    Donc :

    fileDate=$(date '+%d.%m.%Y_%H:%M:%S')


    Existe-t-il un moyen de récupérer cette information si par exemple on se place dans le support amovible via un cd ?

    Oui :

    cd /support_amovible
    du -sh .

    Ou :
    du -sh  /support_amovible

    ;-))
    0
  2. Lucas
     
    Mwarf, oublier le $, j'suis vraiment mal réveillé. Malheureusement cela ne fonctionne toujours pas, j'ai toujours un fichier "Backup-.tar.gz", voici le code entier de cela :
    fileDate=$('date '+%d.%m.%Y_%H:%M:%S'')
    filename="Backup-$fileDate.tar"
    eleve=/media/eleve/
    tar -vcf $filename $eleve | zenity --progress --pulsate


    Sinon pour du -sh, il montre l'espace disque occupé, moi il me faudrait l'espace disque libre =)
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Mwarf, oublier le $, j'suis vraiment mal réveillé.
      Enlève les quotes simples aussi qui ne servent à rien ;-((

      fileDate=$(date '+%d.%m.%Y_%H:%M:%S')


      Sinon pour du -sh, il montre l'espace disque occupé, moi il me faudrait l'espace disque libre =)
      Alors le "df" sera plus approprié ;-)
      0
    2. Lucas
       
      Je les ai enlevées mais aucun changement =/
      Sinon pour df, il faut savoir le nom de la partition pour pouvoir sortir l'espace libre, or je ne sais pas comment obtenir le nom de cette partition. (c'est ce que j'ai essayé d'expliquer dans mon premier message)
      Je suis désolé, je fais des erreurs de base, mais j'ai commencé à apprendre le bash hier.
      0
    3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      $ fileDate=$('date '+%d.%m.%Y_%H:%M:%S'')     # mauvaise syntaxe 
      -bash: date +%d.%m.%Y_%H:%M:%S : commande introuvable 
      
      $ fileDate=$(date '+%d.%m.%Y_%H:%M:%S')     # bonne syntaxe 
      
      $ echo $fileDate 
      03.09.2010_09:56:49 
      
      $


      Sinon pour df, il faut savoir le nom de la partition pour pouvoir sortir l'espace libre, or je ne sais pas comment obtenir le nom de cette partition
      A partir du moment où tu voulais faire un "cd /support_amovible", c'est que tu sais au moins le nom du répertoire, et par extension son point de montage, non ?

      Donc à partir de là on devrait pouvoir connaitre le nom de la partition...
      0
    4. Lucas
       
      Pour la date, ça fonctionne toujours pas, je comprends pas.

      A partir du moment où tu voulais faire un "cd /support_amovible", c'est que tu sais au moins le nom du répertoire, et par extension son point de montage, non ?
      Oui

      Donc à partir de là on devrait pouvoir connaitre le nom de la partition...
      Oui, mais comment ? :p
      0
    5. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Oui, mais comment ? :p
      Admettons que la clé USB soit montée sous "/media/cle_usb" :

      df -h /media/cle_usb | awk  '/cle_usb/ {print $4}'
      0
  3. Lucas
     
    Je mets le script entier si cela peut aider.
    Résumé de script : il doit faire un backup de la partition /media/eleve sur un support externe USB. Il doit également vérifier que l'archive ne sera pas plus grande que l'espace restant sur le support externe.
    Ce qui ne fonctionne pas :
    - La date dans le nom du backup
    - Le test entre les deux valeurs

    Merci de votre aide =)

    #!/bin/bash
    
    eleve=/media/eleve/
    fileDate=$(date '+%d.%m.%Y_%H:%M:%S') 
    filename="Backup-${fileDate}.tar"
    
    
    function endbyzenity() {
    	if [ $? -eq 1 ]
    	then
    		exit
    	fi
    }
    
    function compress(){
    	zenity --question --title "Question" --text "Voulez-vous commencer le backup ? ( Espace disque : $freeSpace Mo / Taille estimée de l'archive : $fileSize Mo )"
    	endbyzenity
       	tar -vcf $filename $eleve | zenity --progress --pulsate --title "Compression tar"
    	gzip -9rvf $filename | zenity --progress --pulsate --title "Compression gz"
    }
    
    
    
    folder=$(zenity --entry --title "Dossier de destination" --text "Entrez le nom du dossier de destination")
    endbyzenity
    
    cd /media/eleve
    fileSize=$(du -km --max-depth=0)
    fileSize=${fileSize%	.}
    
    cd $folder
    freeSpace=$(df -h $folder | awk  '$folder {print $4}') 
    freeSpace=${freeSpace#Tail.} 
    freeSpace=${freeSpace%G}
    let TOTAL=freeSpace*1024
    freeSpace=$TOTAL
    
    if [$freeSpace -lt $fileSize]; then #TODO
    	bad = $($fileSize-$freeSpace)
    	zenity --error --text "Espace disque insuffisant, veuillez libérer au minimum $bad Mo !"
    	endbyzenity
    else
    	compress
    fi
    
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Je n'ai pas trop le temps de regarder en détail, mais il me semble qu'il y a pas mal d'erreurs de syntaxe et d'incohérences...

      En premier :

      filename=$"Backup-$fileDate.tar" <= Mauvaise syntaxe
      
      filename="Backup-${fileDate}.tar"

      Je jetterai un oeil plus tard au reste...
      0
    2. Lucas
       
      Désolé pour les erreurs de syntaxes, à la base je fais de la programmation Java, donc le bash me dépayse un peu.
      Le soucis pour l'espace disque est résolu.
      Pour la date,
      filename="Backup-${fileDate}.tar"
      ne fonctionne pas non plus -_-

      P.S. Code complet remis à jour
      P.S.2 Correction de la variable $bad en
      let BAD=fileSize-freeSpace
      0
    3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Ouvre un terminal et tape :

      fileDate=$(date '+%d.%m.%Y_%H:%M:%S')  <Entrée>
      filename="Backup-${fileDate}.tar" <Entrée>
      echo ${fileDate} <Entrée>
      echo ${filename} <Entrée>
      0
    4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Salut,


      Mets des tirets ou underscore au lieux de deux-points
      fileDate=$(date '+%d.%m.%Y_%H-%M-%S') 
      0
    5. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      0