Script shell et vérification repertoire/date

Salut,

if [[ echo "$i" = echo "$DATE" ]]

Pour avoir quelquechose de différent = est étonnant :slightly_smiling:

je pense que c’est correct puisque je veux zipper uniquement les fichier ayant la date du jour donc

if [[ echo "$i" = echo "$DATE" ]] :exclamation:

[quote=“pcsystemd”]je pense que c’est correct puisque je veux zipper uniquement les fichier ayant la date du jour donc

if [[ echo "$i" = echo "$DATE" ]] :exclamation:[/quote]

Voici la raison de mes doutes :open_mouth:

[quote=“pcsystemd”]Merci a tous encore. Bon Ludo j’ai testé :

[code]#! /bin/bash

Script qui compare la date du fichier trouver dans un répertoire ($1) qui si elle n’est pas égale à la date d’aujourd’hui, compresse le fichier.

création du fichier

touch tmpfile

Variable

TMPDIR="$HOME/tmp"
FILE=find $1 -type f
DATE=ls -la tmpfile | awk '{print $6 " " $7}'

Processus de comparaison de date

for f in $FILE
do
#variable date du fichier
i=ls -al $f | awk '{ print $6 " " $7 }'
if [[ echo "$i" = echo "$DATE" ]]
#copie le fichier ou l’écrase sans demander confirmation
then \cp -p $f $TMPDIR
fi
done
#Zip tous les fichier dont l’extension n’est pas bz2 dans le répertoire
for b in $(ls $TMPDIR | grep [^bz2]$); do bzip2 -9 $b;done
rm -rf tpmfile
[/code]

Alors il fonctionne sauf qu’il me copie les fichiers originaux dans mon répertoire backup et il ne les compresse pas par contre il les compresse dans le répertoire courant hors cela devrait être le contraire non!

Encore merci[/quote]

Oui tout à fait il y à une petite erreur. Mais tu exécuté le script dans le répertoire des fichiers concernés. Il vaut mieux éviter et utilisé les path complet.

L’erreur viens du ls sur le répertoire temporaire. Le mieux serait de le remplacer par un find pour que tu puisse avoir le chemin complet, ou alors ajouter la variable $TMPDIR devant la variable du fichier lors du bzip2.

Comme ceci avec le find:

Ou avec l’ajout de la variable, mais alors il faut faire attention au “/” qui pourrais trainer ou non:

Salut,

Question de débutant :

Le signe = n’est-il pas celui de l’affectation et le “égal” ne s’écrit-il pas == comme en C ?

Très bonne question, j’ai encore appris un trucs :slightly_smiling:

Trouvé ici: traduc.org/~gleu/ykerb/ch07.html

Oui est non cela dépends du nombre de crochets. Je te met en citation un extrait de l’excellent document :
Guide avancé d’écriture des scripts Bash. Une exploration en profondeur de l’art de la programmation shell de Mendel Cooper

[quote] comparaison de chaînes de caractères

= est égal à

if [ "$a" = "$b" ]

== est égal à

if [ "$a" == "$b" ]

  :exclamation: Note

L'opérateur de comparaison == se comporte différemment à l'intérieur d'un test à double crochets qu'à l'intérieur de crochets simples.

[[ $a == z* ]]    # Vrai si $a commence avec un "z" (correspondance de modèle).

[[ $a == "z*" ]]  # Vrai si $a est égal à z* (correspondance littérale).

[ $a == z* ]      # Correspondance de fichiers et découpage de mots.
[ "$a" == "z*" ]  # Vrai si $a est égal à z* (correspondance littérale).

# Merci, Stéphane Chazelas

[/quote]
:wink: