Pages : 1
#1 Le 10/07/2017, à 16:49
- Sciensous
cmp et zenity
hello, je suis en train de faire un script pour lxde qui permet de comparer 2 fichiers par un clic droit sous pcmanfm.
Il marcche sauf pour les fichiers avec espace.. Qui pourrait mayday ?
merci
extrait : -F est un paramètre pour indiquer la comparaison des fichiers sélectionnés ( un .desktop avec -F %F comme paramètre)
if [ "$1" = "-F" ];
then
shift;
t="Fichiers $* : ";
x="$*";
cmp $(echo $x | sed "s/'//g"); #enlève les ' sinon le retour est 2; sed "s/'/\\\"/g" ne marche pas
case $? in
0) r=" identiques";;
1) r=" différents";;
2) r=" inaccessibles";;
esac
notify-send "$t" "$r";
zenity --list --timeout=10 --width=900 --height=200 --text "$t" --column="Résultats" " -> $r";
exit 0;
fi
Dernière modification par Sciensous (Le 10/07/2017, à 16:50)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#2 Le 10/07/2017, à 17:08
- Hizoka
Re : cmp et zenity
Salut,
il faudrait que tu fasses un test surtout pour voir comment il renvoie les valeurs, car ça pose facilement problème ce genre de chose :
for ((i=1; i<=${#@}; i++))
do
echo "\$${i} vaut ${!i}" >> ~/retour.txt
done
le fichier devrait contenir par ex :
$1 vaut oui oui
$2 vaut non
$3 vaut 12.5
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#3 Le 10/07/2017, à 17:21
- pingouinux
Re : cmp et zenity
Bonjour,
Il faudrait pouvoir faire quelque chose de ce genre :
cmp "$@"
Hors ligne
#4 Le 10/07/2017, à 17:38
- kholo
Re : cmp et zenity
bonjour,
vu sur ce site
pour être tranquille; je test chaque fichier pour savoir si ils existent.
[ -f "$1" ] || { echo "problème avec fichier A" ; exit 4 ; } && \
[ -f "$2" ] || { echo "problème avec fichier B" ; exit 4 ; }
et je termine par la comparaison
&& cmp "$1" "$2"
que je test ensuite
#!/bin/bash
[ -f "$1" ] || { echo "problème avec fichier A" ; exit 4 ; } && \
[ -f "$2" ] || { echo "problème avec fichier B" ; exit 4 ; } && \
cmp "$1" "$2" >/dev/null ; #ou bien resultat=$(cmp "$1" "$2") ;
if [ $? -eq 0 ] ; then #cmp retourne 0 si identiques
echo "Fichiers Identiques !" ;
exit 0
elif [ $? -eq 1 ] ; then #cmp retourne 1 si NON identiques
echo "Fichiers Non Identiques !" ;
exit 1
else
echo "Impossible d'accéder aux fichiers !" ;
exit 2
fi
exit 0
Retour des différences :
#!/bin/bash
echo "je met du texte
avec des lignes
et des petites différences
et des grosses pour voir
et une ligne encore" | tee "fichierA" >/dev/null ;
echo "je met du texte
avec des lignes
et des ptites différeces
et une ligne encore" | tee "fichierB" >/dev/null ;
set "fichierA" "fichierB"
[ -f "$1" ] || { echo "problème avec fichier A" ; exit 4 ; } && \
[ -f "$2" ] || { echo "problème avec fichier B" ; exit 4 ; } && \
resultat=$(cmp -l "$1" "$2") ;
# cmp "$1" "$2" >/dev/null ; #ou bien resultat=$(cmp "$1" "$2") ;
if [ $? -eq 0 ] ; then #cmp retourne 0 si identiques
echo "Fichiers Identiques !" ;
exit 0
elif [ $? -eq 1 ] ; then #cmp retourne 1 si NON identiques
echo "Fichiers Non Identiques !" ;
echo -e "différences= \n$resultat"
exit 1
else
echo "Impossible d'accéder aux fichiers !" ;
exit 2
fi
exit 0
Dernière modification par kholo (Le 10/07/2017, à 17:54)
Hors ligne
#5 Le 11/07/2017, à 12:14
- Sciensous
Re : cmp et zenity
merci pour ces retours MAIS:
1. l'existance des fichiers n'est pas à prendre en compte: sélection par pcmanfm par crtl+clic gauche, graphiquement (les fichiers existent forcément)
2. le soucis vient du fait que les fichiers sélectionnés sont mis dans un %F par pcmanfm et sont bien récupérés par le script (affiché, ok) mais apparaisent sous forme de liste 'fichier1' 'fichier2' ...
un copier/coller de la liste précédée de cmp dans un terminal fonctionne;
par contre dans le script, la commande est identique que dans le terminal mais ne fonctionne pas; sauf si je modifie les ' par des " (cf commentaires)
sauf dans le cas de fichiers avec espaces, comme si les " étaient supprimés
3. en récupérant les retours par '> fichier.log', tous s'affiche sauf le retour de cmp où je n'ai rien: comme si cmp était mal utilisé à ce niveau (alors que dans le shell ok)
4. enfin j'utilise sh et non bash (mais le résultat est le même)
edit:
cmp "fichier1" "fichier2" > /tmp/cmp.log
dans le script rend un fichier vide, ce qui n'est pas le cas dans un terminal !!
Edit2: en attendant, ce qui marche: passer par un fichier temporaire via un terminal:
x="$@";
f=/tmp/cmpFichiers.log;
xterm -e "cmp -i 0 ${x} >$f;";
if [ ! -s "$f" ]
then
r=" identiques";
else
r=" différents";
fi
Dernière modification par Sciensous (Le 11/07/2017, à 13:01)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#6 Le 11/07/2017, à 13:09
- kholo
Re : cmp et zenity
je ne connais pas pcmanfm, mais j'ai fait quelques recherches...
l'envoie de chemin en argument posent des problèmes comme avec les autres navigateurs de fichiers.
Nautilus utilise des variables spécifiques :
$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
pour combler cette lacune il y a un mod pour pcmanfm mais il semble source de bug
et cela à donner la naissance de fork : SpaceFM
Hors ligne
Pages : 1