Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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