Bash : soucis de formatage de date + question

Résolu/Fermé
Lucas - 3 sept. 2010 à 09:17
 Lucas - 3 sept. 2010 à 13:53
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



A voir également:

3 réponses

jipicy Messages postés 40805 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 sept. 2010 à 09:25
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
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
jipicy Messages postés 40805 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 sept. 2010 à 09:49
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
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
jipicy Messages postés 40805 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
Modifié par jipicy le 3/09/2010 à 10:41
$ 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
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
jipicy Messages postés 40805 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 sept. 2010 à 10:34
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
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
jipicy Messages postés 40805 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 sept. 2010 à 10:47
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
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
jipicy Messages postés 40805 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 sept. 2010 à 11:32
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 566
3 sept. 2010 à 11:35
Salut,


Mets des tirets ou underscore au lieux de deux-points
fileDate=$(date '+%d.%m.%Y_%H-%M-%S') 
0
jipicy Messages postés 40805 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 sept. 2010 à 11:52
0