Bonsoir à tous,
Cela fait maintenant quelques semaines que je me gratte la tête et que j'essaie de terminer un script me permettant de faire une synchronisation de répertoires en utilisant la commande diff et la commande cp.
Tout ce passe bien lorsque je crée les variables et que je lance les commandes via le prompt mais le script lui, se plante systématique lors de l'exécution de la commande diff (le fichier vers lequel les infos sont redirigées est vide).
Pour le tester il suffit de créer deux répertoires ayant les mêmes fichiers et de rajouter un fichier au répertoire source.
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
seekr=$(id root | grep uid=0 | awk '{print $1}' | awk -F "root" '{print $1}' ) export seekr
cd $HOME
osascript -e 'tell application "Finder" to activate'
if [ "$seekr" = "uid=0(" ]; then
osascript -e 'tell application "Finder" to display dialog "Bienvenue dans le service de synchronisation des répertoires. Veuillez stopper tous les autres programmes avant de continuer." with title "ThroughDiff - Utilisateur root activé" buttons {"continuer..."} default button 1 with icon 1'
else
osascript -e 'tell application "Finder" to display dialog "Bienvenue dans le service de synchronisation des répertoires. Veuillez stopper tous les autres programmes avant de continuer." with title "ThroughDiff - Utilisateur root désactivé" buttons {"continuer..."} default button 1 with icon 1'
exit 0
fi
osascript -e 'tell application "System Events" to keystroke "h" using {command down, option down}'
RepA=$(osascript -e 'tell application "Finder" to choose folder with prompt "CHOIX DU REPERTOIRE SOURCE"') export RepA
if [ "$RepA" = "" ]; then
exit 0
fi
RepB=$(osascript -e 'tell application "Finder" to choose folder with prompt "CHOIX DU REPERTOIRE CIBLE"') export RepB
if [ "$RepB" = "" ]; then
exit 0
fi
Source=$(osascript -e "POSIX path of \"$RepA\"") export Source
Cible=$(osascript -e "POSIX path of \"$RepB\"") export Cible
diff -riEb -x ".*" $Source $Cible | grep -a $Source | grep -v "differ" >./HDUpdateLog.txt
catresult=$(cat -b ./HDUpdateLog.txt | awk -F "/: " '{print $2}') export catresult
nombfich=$(wc -l ./HDUpdateLog.txt | awk '{ print $1 }') export nombfich
if [ "$nombfich" ="0" ]; then
/usr/bin/osascript <<EOT
tell application "Finder"
display dialog "Tous les fichiers du répertoire \"$Source\" sont present dans \"$Cible\""buttons {"Ok"} default button 1 with icon 1
end tell
EOT
rm ./HDUpdateLog.txt
exit 0
else
/usr/bin/osascript <<EOT
tell application "Finder"
display dialog "Il y a \"$nombfich\" fichiers à copier. Liste des nouveaux fichiers du répertoire \"$Source\" \"$catresult\" Voulez-vous les copier dans le répertoire de destination?" buttons {"Stopper", "Copier"} default button 2 cancel button 1
end tell
EOT
cp -nrpv $Source $Cible >./HDUpdateCPLog.txt
cat ./ThroughDiffCplog | grep -v 'not o*' >./HDUpdateCPShortLog.txt
osascript -e 'tell application "Finder" to display dialog "Tous les fichiers ont été copiés avec succès" buttons {"Ok"}'
rm ./HDUpdateLog.txt
exit 0
fi
La commande diff est sensée comparer le contenu de deux répertoires (ainsi que leurs sous répertoires), j'utilise grep pour n'avoir que les fichiers appartenants au répertoire source et pour éviter les messsages concernant une différence de bits (grep -v "differ") redirigée vers HDupdateLog.txt
J'utilise l'éditeur vi et je lance le script via la commande ./HDupdate.sh
Tout de passe bien jusqu'à ce que la commande diff entre en action???
Pourriez-vous me venir en aide, je sèche.
Cela fait maintenant quelques semaines que je me gratte la tête et que j'essaie de terminer un script me permettant de faire une synchronisation de répertoires en utilisant la commande diff et la commande cp.
Tout ce passe bien lorsque je crée les variables et que je lance les commandes via le prompt mais le script lui, se plante systématique lors de l'exécution de la commande diff (le fichier vers lequel les infos sont redirigées est vide).
Pour le tester il suffit de créer deux répertoires ayant les mêmes fichiers et de rajouter un fichier au répertoire source.
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
seekr=$(id root | grep uid=0 | awk '{print $1}' | awk -F "root" '{print $1}' ) export seekr
cd $HOME
osascript -e 'tell application "Finder" to activate'
if [ "$seekr" = "uid=0(" ]; then
osascript -e 'tell application "Finder" to display dialog "Bienvenue dans le service de synchronisation des répertoires. Veuillez stopper tous les autres programmes avant de continuer." with title "ThroughDiff - Utilisateur root activé" buttons {"continuer..."} default button 1 with icon 1'
else
osascript -e 'tell application "Finder" to display dialog "Bienvenue dans le service de synchronisation des répertoires. Veuillez stopper tous les autres programmes avant de continuer." with title "ThroughDiff - Utilisateur root désactivé" buttons {"continuer..."} default button 1 with icon 1'
exit 0
fi
osascript -e 'tell application "System Events" to keystroke "h" using {command down, option down}'
RepA=$(osascript -e 'tell application "Finder" to choose folder with prompt "CHOIX DU REPERTOIRE SOURCE"') export RepA
if [ "$RepA" = "" ]; then
exit 0
fi
RepB=$(osascript -e 'tell application "Finder" to choose folder with prompt "CHOIX DU REPERTOIRE CIBLE"') export RepB
if [ "$RepB" = "" ]; then
exit 0
fi
Source=$(osascript -e "POSIX path of \"$RepA\"") export Source
Cible=$(osascript -e "POSIX path of \"$RepB\"") export Cible
diff -riEb -x ".*" $Source $Cible | grep -a $Source | grep -v "differ" >./HDUpdateLog.txt
catresult=$(cat -b ./HDUpdateLog.txt | awk -F "/: " '{print $2}') export catresult
nombfich=$(wc -l ./HDUpdateLog.txt | awk '{ print $1 }') export nombfich
if [ "$nombfich" ="0" ]; then
/usr/bin/osascript <<EOT
tell application "Finder"
display dialog "Tous les fichiers du répertoire \"$Source\" sont present dans \"$Cible\""buttons {"Ok"} default button 1 with icon 1
end tell
EOT
rm ./HDUpdateLog.txt
exit 0
else
/usr/bin/osascript <<EOT
tell application "Finder"
display dialog "Il y a \"$nombfich\" fichiers à copier. Liste des nouveaux fichiers du répertoire \"$Source\" \"$catresult\" Voulez-vous les copier dans le répertoire de destination?" buttons {"Stopper", "Copier"} default button 2 cancel button 1
end tell
EOT
cp -nrpv $Source $Cible >./HDUpdateCPLog.txt
cat ./ThroughDiffCplog | grep -v 'not o*' >./HDUpdateCPShortLog.txt
osascript -e 'tell application "Finder" to display dialog "Tous les fichiers ont été copiés avec succès" buttons {"Ok"}'
rm ./HDUpdateLog.txt
exit 0
fi
La commande diff est sensée comparer le contenu de deux répertoires (ainsi que leurs sous répertoires), j'utilise grep pour n'avoir que les fichiers appartenants au répertoire source et pour éviter les messsages concernant une différence de bits (grep -v "differ") redirigée vers HDupdateLog.txt
J'utilise l'éditeur vi et je lance le script via la commande ./HDupdate.sh
Tout de passe bien jusqu'à ce que la commande diff entre en action???
Pourriez-vous me venir en aide, je sèche.