Bash : soucis de formatage de date + question [Résolu/Fermé]

Signaler
-
 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

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862
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

;-))
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 =)
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.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862
$ 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...
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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862
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}'
Ouep merci, ça m'a mis sur la voie et j'ai réussi à coder ça. On peut sûrement faire plus concis mais ça marche :
cd $folder
freeSpace=$(df -h $folder | awk  '$folder {print $4}') #TODO
freeSpace=${freeSpace#Tail.} #TODO
freeSpace=${freeSpace%G}
let TOTAL=freeSpace*1024
freeSpace=$TOTAL
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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862
if [ "${freespace}" -lt "${filesize}" ]; then 
BAD=$((${filesize}-${freespace}))
...
fi
Je vais vous énerver, mais ça fonctione pas =)

function compress(){
	zenity --question --title "Question" --text "Voulez-vous commencer le backup ? 
Espace disque : $freeSpace Mo 
Taille estimée de l'archive : $fileSize Mo 
Espace disque après l'opération : $GOOD Mo"
	endbyzenity
   	tar -vcf $filename $eleve #| zenity --progress --pulsate --title "Compression tar"
	gzip -9rvf $filename #| zenity --progress --pulsate --title "Compression gz"
	
}

if [ "${freespace}" -lt "${filesize}" ]; then 
	BAD=$((${filesize}-${freespace}))
	zenity --error --text "Espace disque insuffisant, veuillez libérer au minimum $BAD Mo !"
	endbyzenity
else
	let GOOD=freeSpace-fileSize
	compress
fi


En bonus le résultat : http://img137.imageshack.us/img137/2555/capturesk.png
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862
let GOOD=freeSpace-fileSize

GOOD=$((freeSpace-fileSize))

Devrait aller mieux ;-\
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862
Et rajoute un "exit" après le endbyzenity

if [ "${freespace}" -lt "${filesize}" ]; then  
 BAD=$((${filesize}-${freespace})) 
 zenity --error --text "Espace disque insuffisant, veuillez libérer au minimum $BAD Mo !" 
 endbyzenity 
        exit 
else 
 GOOD=$((${freeSpace}-${fileSize})) 
 compress 
fi 
Désolé, j'ai pas vérifié les noms des variables -_-"

if [ "${freeSpace}" -lt "${fileSize}" ]; then <-- c'est juste

les $GOOD et $BAD fonctionnent avec "let" et les syntaxes citées précédemment.

Tous mes problèmes sont résolus ^^

Merci beaucoup à tous et bonne journée =D