bonsoir et bonne semaine
j'ai un probleme ce dimanche.
ddate=`stat --printf '%y#%n\n' $a/*$t* | sort | cut -d "." -f 1 | sed -n '1 p'`
g="--newer-mtime=\"`echo ${ddate}`\""
nom="backup"
marche="oui"
if [ "$marche" = "oui" ] ; then
archive="$a/${nom}_$(date +%Y-%m%B-%d_%H%M%S).tar.gz"
tar -zcvf $archive -X /home/patrick/backupExclude $g --exclude=/proc --exclude=/dev -p -P ${s//:/ }
fi
et ca me donne la commande
tar -zcvf dossier/archive.tar.gz -X /home/patrick/backupExclude '--newer-mtime="2016-09-18' '00:26:27"' --exclude=/proc --exclude=/dev -p -P /media/seagate500GO/patrick/Photos_triees/2016/
la commande stat m'envoie
2016-09-18 00:26:27
> :~$ bash --version
GNU bash, version 4.3.42(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
Licence GPLv3+ : GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/gpl.html>
merci de me résoudre ce soucis
# Formatage
Posté par Marotte ⛧ . Évalué à 4.
Bonjour,
Utilise la balise markdown qui va bien pour poster ton code ici (https://linuxfr.org/wiki/aide-edition#code) parce que là c’est illisible…
Pourquoi pas simplement :
g="--newer-time=\"${ddate})\""
?```
[^] # Re: Formatage
Posté par patrick-L . Évalué à 1.
j'ai fais comme vous dites
et ca marche lorsque je fais
g="--newer-mtime="
et dans la commande
et là ca marche.
# Hop
Posté par Marotte ⛧ . Évalué à 4.
Oui patron.
# en passant
Posté par gaaaaaAab . Évalué à 3.
En règle générale, ça serait vraiment bien de poster les sorties correspondant effectivement au script décrit. Là, vu le script, dans la ligne générée, archive.tar.gz devrait plutôt ressembler à archive_2016-09September-18_002627 (curieux format de date). D'autre part,
ne correspond pas non plus à $g tel que g est défini.
Sinon, le calcul de ddate peut être légèrement amélioré.
On peut identifier l'entrée qu'on veut garder avec ls avant de transmettre le résultat à stat (du coup, stat ne traite qu'un seul fichier au lieu d'une liste).
Pour garder la première ligne d'une liste, sed -n '1 p' fonctionne, mais parcourt toute la liste. Il vaut mieux utiliser head (ce qui améliore également la lisibilité).
Sur le plan cosmétique, je préfère évaluer avec $(…) plutôt que \'…\', mais là, c'est plus une question de préférence personnelle.
Bref, j'écrirais plutôt :
Au final, le nombre de commande lancées est le même, mais seul ls travaille sur une liste, les autres commandes ne traitent qu'une seule entrée. Sur des répertoires avec de nombreux fichiers, la différence en temps d'exécution peut être significative.
[^] # Re: en passant
Posté par benja . Évalué à 2. Dernière modification le 20 septembre 2016 à 23:33.
En fait on peut carrément se passer de stat:
Donc tout simplement
tar --newer-mtime="./`ls $a/*$t* -t | tail -1`"
Si $a est absolu, alors il faut omettre le ./ évidemment.Remarque aussi en passant, le double encadrement avec des guillemets est plus que probablement la source de l'erreur originale. Les guillemets intérieurs n'ont aucune raison d'être, tar ne s'attend probablement pas à parser une date qui commence et qui fini par des guillemets. Les premiers guillemets empêchent le shell de séparer la date au niveau de l'espace lorsqu'il construit la liste d'arguments à tar.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.