Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/06/2011, 12h33   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 15
Points : 14
Points : 14
Par défaut Extraire un nombre d'un nom de dossier et lui soustraire 7

Bonjour,

j'ai actuellement des dossiers du type JJ-MM-AAAA (aujourd'hui -> 09-06-2011).
`echo dossier_en_question | cut -c1-2` me permet de récupérer 09 ici, mais je n'arrive pas à ensuite lui retrancher 7 (la variable est considéré comme un string et non pas un entier ?). Comment pourrais-je faire ?
Merci d'avance.
Alwaysin est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/06/2011, 12h37   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Bonjour,

quel interpréteur de commande ?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/06/2011, 12h49   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 15
Points : 14
Points : 14
Merci pour la réponse

L'interpréteur de commandes est Bash.
Mais au temps pour moi, j'ai trouvé comment faire :
expr `date +"%d"` - 7 (Ca marche vu que je l'utilise dans le script où les dossiers sont nommés, dossiers qui sont nommés avec la commande date)

Mais maintenant j'aimerais savoir comment faire, par exemple, si le jour actuel est disons le 6 juillet. Je n'aimerais pas me retrouver avec -1 mais plutôt 30 (30 juin).
Alwaysin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 13h00   #4
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
oui, on n'effectue pas de calcul directement sur des dates, mais sur des temps en secondes depuis Epoch, pour la raison que tu évoques entre autre.

pour pouvoir trier correctement les fichiers ayant le même préfixe, la date dans leur nom devrait suivre le format YYYY-MM-DD, aussi parce que date -d YYYY-MM-DD +%s fonctionne sans triturage supplémentaire.

en bash, il y a rarement besoin de cut, regarde dans le man bash, Remplacement des paramètres, ${paramètre:début:longueur}
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/06/2011, 14h28   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 15
Points : 14
Points : 14
La commande date que j'ai est bizarre et n'accepte pas certains paramètres (ton exemple notamment).

Quoi qu'il en est, j'ai finalement décidé de renommer les dossiers en temps Epoch, et pour supprimer ceux datant d'une semaine :

Code :
1
2
3
4
5
6
7
epoch=$(date +%s)
datedujour=$(date +%d-%m-%y)
mkdir $epoch/$datedujour
dossierasupprimer=$(expr $epoch - 604800) # 604800 secondes = 7 jours
if [ -d $dossierasupprimer ]; then
     rm -R $dossierasupprimer
fi
Je ne peux pas vraiment le tester en conditions réelles (il me faudrait au moins une semaine et un jour pour le faire ^^) mais ça semble fonctionner.
Le script s'exécute toujours à la même heure, tous les jours, donc ce devrait être bon mais le problème est que la "solution" (avoir des dossiers du genre 1307619520/09-06-11) est très peu élégante, et c'est fastidieux quand on recherche un jour particulier : il faut les ouvrir un à un, même si sur 7 jours cela ne fait pas beaucoup.
Alwaysin est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/06/2011, 14h55   #6
Membre Expert
 
Homme
Ingénieur développement logiciels
Inscription : octobre 2008
Messages : 1 375
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : octobre 2008
Messages : 1 375
Points : 2 034
Points : 2 034
Tu peux garder tes noms de dossiers au format que tu veux. Il te suffit pour le traitement de les convertir au format YYYY-MM-DD (qui soit dit en passant est infiniment mieux que DD-MM-YYYY puisque tu as un ordre alphabétique identique à l'ordre chronologique), et d'utiliser date -d pour avoir la date 7 jours avant. Par exemple
Code :
1
2
date -d "2011-06-06 - 7 days" +%Y-%m-%d
2011-05-30
matafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 15h08   #7
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Citation:
La commande date que j'ai est bizarre et n'accepte pas certains paramètres (ton exemple notamment).
tu n'es probablement pas sur un système GNU; ou alors tu as tapé la "commande" telle quelle, alors que ce n'en était pas vraiment une, mais un exemple de format.

Je voyais plutôt, sur un système GNU :
Code :
1
2
3
4
5
6
7
#!/bin/bash
 
rep=ton_Repertoire
aujourdhui=$(date +%s)
for file in $rep/*
do if [ -d "$file" ] && (( $(date -d "$file +604800seconds") <= aujourdhui )); then rm -R "$file"; fi
done
bien que la commande GNU date permette de retrouver la date d'un fichier avec l'option -r.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/06/2011, 16h05   #8
Candidat au titre de Membre du Club
 
Inscription : janvier 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 15
Points : 14
Points : 14
Oui voilà c'est ça, je n'ai pas la version GNU de la commande date je crois (je suis sur FreeNAS). Donc vos exemples ne fonctionnent malheureusement pas et je suis obligé de trouver des contournements
Alwaysin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h52.


 
 
 
 
Partenaires

Hébergement Web