Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#26 Le 23/10/2010, à 16:43

Hizoka

Re : Scripts pour remplacer un supercopier...

chemin=$(echo -e "${NAUTILUS_SCRIPT_SELECTED_URIS//\%/\\x}") chemin=$(echo "$chemin" | sed -e 's/file:\/\///g');

=>

chemin=$(echo -e "${NAUTILUS_SCRIPT_SELECTED_URIS//\%/\\x}") chemin="${chemin#file://}" chemin="${chemin//file:??/$'\n'}"

comment ça marche, tu colles ces fichiers dans /usr/bin ?

En ligne

#27 Le 25/10/2010, à 10:14

Alextazy

Re : Scripts pour remplacer un supercopier...

Hizoka a écrit :

comment ça marche, tu colles ces fichiers dans /usr/bin ?

Tu me demande bien comment faire pour faire de ces scripts des "nautilus scripts"? Si c'est le cas, il faut les coller dans ~/.gnome2/nautilus-scripts et les rendre exécutables; ils apparaîtront dans le menu du clic-droit dans un menu "scripts", sous "créer un document" smile ... Si ce n'est pas ça que tu veux savoir, ben je sais pas trop quoi te répondre... hmm

Et sinon, tu y étais presque avec ton code car

chemin=$(echo -e "${NAUTILUS_SCRIPT_SELECTED_URIS//\%/\\x}") chemin="${chemin#file://}" chemin="${chemin//file:??/$'\n'}"

rajoute des lignes superflues, mais

chemin=$(echo -e "${NAUTILUS_SCRIPT_SELECTED_URIS//\%/\\x}") chemin="${chemin#file://}" chemin="${chemin//file:??/}";
echo "${chemin}" >> /tmp/panier_de_copie;

fonctionne bien comme mon

chemin=$(echo -e "${NAUTILUS_SCRIPT_SELECTED_URIS//\%/\\x}") chemin=$(echo "$chemin" | sed -e 's/file:\/\///g');
sed -s 's/\ \//\n\//g' <<< "${chemin}" >> /tmp/panier_de_copie;

original et donne finalement le bon résultat.

J'ai également oublié de préciser que rsync à l'avantage que je trouve énorme (par rapport à une sorte de copie simple) de traiter aussi bien les dossiers que les fichiers; on peut donc faire un panier de copie contenant des dossiers et des fichiers. Par ailleurs, il permet aussi de ne pas se soucier des doublons; on peut sélectionner plusieurs fois un fichier dans la liste de copie sans conséquance sur le temps de transfert.

Par contre, je me demande si je ne ferais pas mieux de faire en sorte que le script "modifier panier" soit plutôt une partie du script qui copie dans le panier; que les possibilités de modifications apparaissent lorsqu'on clique sur l'icone de notification comme dans le script ci-dessous:

#!/bin/bash

chemin=$(echo -e "${NAUTILUS_SCRIPT_SELECTED_URIS//\%/\\x}") chemin=$(echo "$chemin" | sed -e 's/file:\/\///g');

nom_du_script="${0##*/}"
pidof -x $nom_du_script >> PID_panier_de_copie

if [[ -s /tmp/panier_de_copie ]]
then 
    echo "${chemin}" >> /tmp/panier_de_copie;
    break
else
    echo "${chemin}" >> /tmp/panier_de_copie;
    while [[ -s /tmp/panier_de_copie ]]
        do 
        zenity --notification \
        --window-icon="/usr/share/icons/gnome/scalable/actions/list-add.svg" \
        --text="Panier copie en cours" && paniercopie=$(cat /tmp/panier_de_copie) && paniercopie=$(echo $paniercopie | sed -s "s#\ \/#\nTRUE\n\/#g" | sed -s "s# # #g")
        zenity --list --checklist --width=1000 --height=500 --title="Panier" \
        --column='' --column="Fichiers à conserver dans le panier" \
        "TRUE"   $paniercopie | sed -s 's#|#\n#g'| sed -s "s# # #g" > /tmp/panier_de_copie_agarder;
        cat /tmp/panier_de_copie_agarder > /tmp/panier_de_copie
        rm -rf /tmp/panier_de_copie_agarder
        
    done
fi

Dernière modification par Alextazy (Le 25/10/2010, à 11:34)

Hors ligne

#28 Le 25/10/2010, à 13:20

Hizoka

Re : Scripts pour remplacer un supercopier...

chemin=$(echo -e "${NAUTILUS_SCRIPT_SELECTED_URIS//\%/\\x}") chemin="${chemin#file://}" chemin="${chemin//file:??/}";
echo "${chemin}" >> /tmp/panier_de_copie;

ne marche pas comme il faut chez moi...
il me les mets tous à la suite les uns après les autres... il ne saute pas de ligne

Perso je pense qu'il vaut mieux regrouper au maximum tes scripts.

Tu me demande bien comment faire pour faire de ces scripts des "nautilus scripts"? Si c'est le cas, il faut les coller dans ~/.gnome2/nautilus-scripts et les rendre exécutables; ils apparaîtront dans le menu du clic-droit dans un menu "scripts", sous "créer un document"  ...

ok, c'est un script nautilus....
je vais tester sous kubuntu quand même alors tongue

Si jamais tu veux te lancer dans la construction d'une vrai interface graphique avec, dis le moi, je pourrais t'aider avec glade et glade2script.

Dernière modification par Hizoka (Le 25/10/2010, à 13:26)

En ligne

#29 Le 25/10/2010, à 14:00

Totor

Re : Scripts pour remplacer un supercopier...

yikes

Alextazy a écrit :

cat /tmp/panier_de_copie_agarder > /tmp/panier_de_copie

à remplacer par

cp /tmp/panier_de_copie_agarder  /tmp/panier_de_copie

il faut vraiment que je trouve du temps pour regarder en détail ...

je suis conscient que c'est ton premier script... je ne relève pas cette "erreur" pour te rabaisser, don't worry wink

Dernière modification par Totor (Le 25/10/2010, à 14:03)


-- Lucid Lynx --

Hors ligne

#30 Le 25/10/2010, à 14:35

Alextazy

Re : Scripts pour remplacer un supercopier...

Totor a écrit :

je suis conscient que c'est ton premier script... je ne relève pas cette "erreur" pour te rabaisser, don't worry

Et je ne le prend pas comme ça, t'inquiète wink... je suis d'ailleurs en demande de ce genre de remarque pour apprendre! smile ... Je ne sais pas si j'ai donné l'impression d'être parano à un moment, mais c'est pas le cas! Lâchez-vous! (peut-être un peu maso par contre...)

J'ai remplacer tous les

cat /chemin/fichier1 > /chemin/fichier2

par

cp /chemin/fichier1 /chemin/fichier2

suivant tes recommandations. Merci!

Dernière modification par Alextazy (Le 25/10/2010, à 14:35)

Hors ligne

#31 Le 25/10/2010, à 15:59

Totor

Re : Scripts pour remplacer un supercopier...

Bon, j'ai réussi à prendre un peu de temps.
Ne connaissant pas les scripts nautilus, je me suis penché dans un premier temps sur le "pourquoi" de ceci :

chemin=$(echo -e "${NAUTILUS_SCRIPT_SELECTED_URIS//\%/\\x}") chemin=$(echo "$chemin" | sed -e 's/file:\/\///g');

que j'ai traduis par :

IFS=$'\n' chemins=( $(printf "${NAUTILUS_SCRIPT_SELECTED_URIS//$'%'/$'\x'}") )
chemins=( "${chemins[@]//file:??}" )

Afin d'utiliser que du bash et de travailler avec un tableau ( et non une variable unique contenant tous les noms de fichier)

Voilà dans un premier temps....


-- Lucid Lynx --

Hors ligne

#32 Le 25/10/2010, à 16:57

Hizoka

Re : Scripts pour remplacer un supercopier...

Alextazy => depuis le temps que je te le dis tongue

totor => je proposais :

chemin=$(echo -e "${NAUTILUS_SCRIPT_SELECTED_URIS//\%/\\x}") chemin="${chemin#file://}" 
echo "${chemin//file:??/$'\n'}" >> son_fichier_txt

dans le cas ou il veut utiliser son fichier texte (qui est utilisé par les autres scripts)

En ligne

#33 Le 25/10/2010, à 17:50

Totor

Re : Scripts pour remplacer un supercopier...

@Hizoka : ah oui, je n'ai pas regardé tous les posts... juste ses scripts wink
et c'est vrai que du coup chemins=( "${chemins[@]//file:??}" ) est correcte mais chemins=( "${chemins[@]#file:??}" ) est plus adapté.

par contre, ton echo "${chemin//file:??/$'\n'}" >> son_fichier_txt rajoute des lignes inutilement ....


-- Lucid Lynx --

Hors ligne

#34 Le 25/10/2010, à 17:58

Hizoka

Re : Scripts pour remplacer un supercopier...

c'est ce qu'il me dit aussi mais chez moi ça ne rajoute rien...

NAUTILUS_SCRIPT_SELECTED_URIS="file:///home/alex/.gnome2/nautilus-scripts/000_mettre_dans_panier file:///home/alex/.gnome2/nautilus-scripts/001_copier_panier_ici file:///home/alex/.gnome2/nautilus-scripts/002_d%C3%A9placer_panier_ici file:///home/alex/.gnome2/nautilus-scripts/003_modifier_panier"
chemin=$(echo -e "${NAUTILUS_SCRIPT_SELECTED_URIS//\%/\\x}") chemin="${chemin#file://}" 
echo "${chemin//file:??/$'\n'}" >> son_fichier_txt
cat son_fichier_txt 
/home/alex/.gnome2/nautilus-scripts/000_mettre_dans_panier 
/home/alex/.gnome2/nautilus-scripts/001_copier_panier_ici 
/home/alex/.gnome2/nautilus-scripts/002_déplacer_panier_ici 
/home/alex/.gnome2/nautilus-scripts/003_modifier_panier

En ligne

#35 Le 25/10/2010, à 18:11

Rolinh

Re : Scripts pour remplacer un supercopier...

Salut,

je vois que je suis loin d'être le seul à trouver que ça manque un supercopier-like!

Si jamais il y en a qui connaissent bien le C et qui trouvent que c'est quelque chose qui manque vraiment, ça aiderait toujours à développer plus vite s'il y avait quelques développeurs de plus sur mon projet de gestionnaire de copie (on est deux actuellement). Désolé de profiter de ce topic pour faire ma pub.
--> LinCopier sur sourceforge
-->le dépôt mercurial

Et bon courage pour le peaufinage de ton script wink


Blog
"If you put a Unix shell to your ear, do you hear the C ?"

Hors ligne

#36 Le 25/10/2010, à 18:55

Totor

Re : Scripts pour remplacer un supercopier...

huum, je comprends pourquoi ça ne rajoute rien ... la substitution est déjà faite par chemin="${chemin#file://}" (je suis passé à côté), du coup le //file:??/$'\n' est inutile


-- Lucid Lynx --

Hors ligne

#37 Le 25/10/2010, à 19:05

Hizoka

Re : Scripts pour remplacer un supercopier...

ba non pas inutile...

bah alors Totor smile (ou alors c'est moi qui suis à l'ouest) :

NAUTILUS_SCRIPT_SELECTED_URIS="file:///home/alex/.gnome2/nautilus-scripts/000_mettre_dans_panier file:///home/alex/.gnome2/nautilus-scripts/001_copier_panier_ici file:///home/alex/.gnome2/nautilus-scripts/002_d%C3%A9placer_panier_ici file:///home/alex/.gnome2/nautilus-scripts/003_modifier_panier"

chemin=$(echo -e "${NAUTILUS_SCRIPT_SELECTED_URIS//\%/\\x}")
echo "${chemin}"
file:///home/alex/.gnome2/nautilus-scripts/000_mettre_dans_panier file:///home/alex/.gnome2/nautilus-scripts/001_copier_panier_ici file:///home/alex/.gnome2/nautilus-scripts/002_déplacer_panier_ici file:///home/alex/.gnome2/nautilus-scripts/003_modifier_panier
=> remplacement des erreurs dans les noms

chemin="${chemin#file://}" 
echo "${chemin}"
/home/alex/.gnome2/nautilus-scripts/000_mettre_dans_panier file:///home/alex/.gnome2/nautilus-scripts/001_copier_panier_ici file:///home/alex/.gnome2/nautilus-scripts/002_déplacer_panier_ici file:///home/alex/.gnome2/nautilus-scripts/003_modifier_panier
= seul le 1er file:// est degagé afin qu'il ne le change pas en saut de ligne apres.

chemin="${chemin//file:??/$'\n'}"
echo "${chemin}"
=> la ca va a la ligne a chaque file://

En ligne

#38 Le 25/10/2010, à 21:25

Totor

Re : Scripts pour remplacer un supercopier...

arg oui, effectivement je n'y suis vraiment pas ... roll
par contre, en toute logique : NAUTILUS_SCRIPT_SELECTED_URIS contient déjà des $'\n' comme séparateur de fichier donc remplacer file:// par $'\n' rajoute à nouveau des retours à la ligne wink


-- Lucid Lynx --

Hors ligne

#39 Le 25/10/2010, à 23:42

Hizoka

Re : Scripts pour remplacer un supercopier...

non justement il n'y a pas de saut de ligne smile

En ligne

#40 Le 26/10/2010, à 08:25

Totor

Re : Scripts pour remplacer un supercopier...

dans ton exemple peut-être mais lorsque NAUTILUS_SCRIPT_SELECTED_URIS est alimentée par nautilus, c'est le cas


-- Lucid Lynx --

Hors ligne

#41 Le 26/10/2010, à 13:34

Hizoka

Re : Scripts pour remplacer un supercopier...

Alextazy a écrit :

et voilà le fameux /tmp/test1:

file:///home/alex/.gnome2/nautilus-scripts/000_mettre_dans_panier file:///home/alex/.gnome2/nautilus-scripts/001_copier_panier_ici file:///home/alex/.gnome2/nautilus-scripts/002_d%C3%A9placer_panier_ici file:///home/alex/.gnome2/nautilus-scripts/003_modifier_panier

c'est sur que si on ne me donne pas les bons exemples...

En ligne

#42 Le 26/10/2010, à 13:56

Totor

Re : Scripts pour remplacer un supercopier...

effectivement wink


-- Lucid Lynx --

Hors ligne

#43 Le 26/10/2010, à 14:38

Alextazy

Re : Scripts pour remplacer un supercopier...

Hizoka a écrit :
Alextazy a écrit :

et voilà le fameux /tmp/test1:

file:///home/alex/.gnome2/nautilus-scripts/000_mettre_dans_panier file:///home/alex/.gnome2/nautilus-scripts/001_copier_panier_ici file:///home/alex/.gnome2/nautilus-scripts/002_d%C3%A9placer_panier_ici file:///home/alex/.gnome2/nautilus-scripts/003_modifier_panier

c'est sur que si on ne me donne pas les bons exemples...

... effectivement +1, je ne sais pas ce qui est arrivé... désolé big_smile

Par contre, j'insiste sur le fait qu'ils doivent être utilisés en tant que nautilus scripts; là est tout leur intérêt d'ailleurs. Cela permet d'avoir accès à ces fonctionnalités directement ultra simples dans le clic droit et sans avoir de process en tâche de fond. Dans leur état, ils fonctionnent d'ailleurs très bien chez moi en tant que nautilus scripts.

Merci pour ta proposition Hizoka; à quel niveau penses-tu qu'ils mériteraient une interface graphique plus élaborée?

Hors ligne

#44 Le 26/10/2010, à 15:50

Hizoka

Re : Scripts pour remplacer un supercopier...

Juste dans le cas ou tu voudrais faire une interface à la supercopier...

de ce fait :

NAUTILUS_SCRIPT_SELECTED_URIS="file:///home/alex/.gnome2/nautilus-scripts/000_mettre_dans_panier
file:///home/alex/.gnome2/nautilus-scripts/001_copier_panier_ici
file:///home/alex/.gnome2/nautilus-scripts/002_d%C3%A9placer_panier_ici
file:///home/alex/.gnome2/nautilus-scripts/003_modifier_panier"

chemin=$(echo -e "${NAUTILUS_SCRIPT_SELECTED_URIS//\%/\\x}")

chemin="${chemin//file:??}" 
echo "${chemin}"
/home/alex/.gnome2/nautilus-scripts/000_mettre_dans_panier
/home/alex/.gnome2/nautilus-scripts/001_copier_panier_ici
/home/alex/.gnome2/nautilus-scripts/002_déplacer_panier_ici
/home/alex/.gnome2/nautilus-scripts/003_modifier_panier

En ligne

#45 Le 26/10/2010, à 16:10

Totor

Re : Scripts pour remplacer un supercopier...

Bonsoir,

Si j'ai bien compris ton besoin, le premier script peut s'écrire ainsi :

#!/bin/bash
nom_du_script="${0##*/}"
IFS=$'\n' chemins=( $(printf "${NAUTILUS_SCRIPT_SELECTED_URIS//$'%'/$'\x'}") )

# génération du nom du panier
fichier_panier="/var/tmp/$(id -u)_${nom_du_script%.*}.dat"

# alimentation du panier
printf "%s\n" "${chemins[@]#file:??}" >> "${fichier_panier}"

# si il existe déjà un process alors on quitte
[[ $(pidof -x "${nom_du_script}") = *[[:blank:]]* ]] && exit 0

# on boucle tant que le panier existe 
while [[ -s "${fichier_panier}" ]]
do
  if zenity --notification --window-icon="/usr/share/icons/gnome/scalable/actions/list-add.svg" --text="Panier copie en cours" && zenity --text-info --title="panier éditable" --width=1000 --height=500 --filename="${fichier_panier}" --editable > "${fichier_panier}.tmp"; then
    # panier modifié, on remplace l'ancien par le nouveau
    [[ -s "${fichier_panier}.tmp" ]] && mv "${fichier_panier}.tmp" "${fichier_panier}"
 else
    # si clique sur la croix, on supprime le panier
    [[ -f "${fichier_panier}" ]] && rm "${fichier_panier}"
 fi
done

-- Lucid Lynx --

Hors ligne

#46 Le 27/10/2010, à 11:30

Alextazy

Re : Scripts pour remplacer un supercopier...

@Totor:

Merci Totor pour cette refonte totale, elle m'a énormément apportée, me passer de sed (même si je n'en suis pas vraiment capable pour le moment), rajouter l'uid dans les noms de fichiers temporaires, ne pas tout écrire dans /tmp, etc

Malgré tout 2-3 choses me chiffonnent dans ton script, ou s'éloignent du but originel.

Je cherchais à faire en sorte que le script ne se ferme et efface les fichiers que lorsqu'on efface totalement la liste. Dans le tiens, il semble impossible d'effacer totalement cette liste... par ailleurs, lorsque s'ouvre la fenêtre du panier de copie, le fait de fermer la fenêtre en cliquant sur la croix tue le script; on a pas "le droit à l'erreur", il faut remettre des fichiers dans le panier pour le consulter à nouveau.

Un autre point très important à mes yeux est la génération du fichier contenant le PID dans mon script original; celui-ci permet de tuer le script et effacer les fichiers temporaires depuis un des autres scripts, comme par exemple celui qui copie lorsqu'on répond "non" à "voulez-vous conserver le panier".

@Hizoka:

Une interface plus élaborée serait sans doute intéressante plus tard, à partir du moment où l'on pourra régler[*][/*] la vitesse de copie et avoir une vraie barre de progression (faisable via rsync) et ajouter des fichier à la liste pendant la copie. Bref c'est une possibilité très intéressante mais il manque encore à mon avis des fonctionnalités pour vraiment avoir besoin d'une interface plus élaborée.

Hors ligne

#47 Le 27/10/2010, à 12:57

Totor

Re : Scripts pour remplacer un supercopier...

Alextazy a écrit :

Je cherchais à faire en sorte que le script ne se ferme et efface les fichiers que lorsqu'on efface totalement la liste. Dans le tiens, il semble impossible d'effacer totalement cette liste...

je n'avais pas vu cet aspect !

Alextazy a écrit :

par ailleurs, lorsque s'ouvre la fenêtre du panier de copie, le fait de fermer la fenêtre en cliquant sur la croix tue le script; on a pas "le droit à l'erreur", il faut remettre des fichiers dans le panier pour le consulter à nouveau.

Je pensais que c'était ce que tu cherchais à faire big_smile

Un autre point très important à mes yeux est la génération du fichier contenant le PID dans mon script original; celui-ci permet de tuer le script et effacer les fichiers temporaires depuis un des autres scripts, comme par exemple celui qui copie lorsqu'on répond "non" à "voulez-vous conserver le panier".

En soit, tu n'as pas besoin de le connaitre puisque tu peux le trouver mais cela implique que le script d'alimentation du panier ne change jamais de nom.
Ensuite,  on peut exploiter d'autres pistes :
- un seul fichier pour le pid et le panier
- un pipe permettant de recevoir le signal de fin...

Mais je ne suis pas trop partisan de l'utilisation de fichier (que ce soit pour conserver un pid ou comme flag) car ils peuvent rester même si il n'y a plus de process associé. Du coup, cela fausse la logique des enchainements des traitements.

EDIT : je garde à l'esprit les autres scripts. Je réfléchis notamment sur le 2nd (la partie de copie avec une barre de progression dont l'évolution dépend du contenu du panier et de la taille des fichiers restants wink )

Dernière modification par Totor (Le 27/10/2010, à 13:00)


-- Lucid Lynx --

Hors ligne

#48 Le 06/01/2011, à 21:41

nordinatueur

Re : Scripts pour remplacer un supercopier...

J'aime beaucoup ce projet ! Son fonctionnement et les problèmes qu'il pose sont très intéressants, sans parler du but final !


nordinatueur@jabber.fr Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !

Hors ligne

#49 Le 05/11/2012, à 17:09

Alextazy

Re : Scripts pour remplacer un supercopier...

Et bien voilà, deux ans ont passés et rien n'as changé, toujours pas de VRAIS BONS équivalents à "Supercopier" ou autres. Quand on copie 3-4 fichiers en plusieurs fois on explose le temps de copie qui se font toujours encore en parallèle, pas l'un après l'autre...

Je me débrouillais bien jusque là avec les scripts que j'ai laborieusement réalisés ici avec l'aide vitale de quelques membres bienfaiteurs. Seulement voilà, je suis passé sous Ubuntu 12.04 64bits et son unity et bien sûr plus rien ne fonctionne alors que mon script n'utilise que du bash , xterm, zenity et un tout petit gtkrsync sad .
=> donc, déterrage de sujet, surtout qu'il ne doit vraiment pas manquer grand chose!

Je pense que encore beaucoup de monde pourrait être vraiment intéressé par ce script, éventuellement même passable en "nautilus action" ce qui rendrait la chose à pleurer de bonheur. Ces scripts sont simples (sauf pour moi qui suis à 10^32 années lumière d'être un programmeur), employables facilement et constituent de bonnes "rustines" en attendant un hypothétique SuperCopier qui fonctionne bien sous nunux...

Voilà les scripts (mise en liste de copie + copie des fichiers de la liste + déplacement des fichiers de la liste + modification de la liste) tous avec leur commentaires descriptif du code:

ici en tar.gz et là en .7z

Faites un geste pour la communauté et pour moi en développant ces scripts! On ne doit vraiment pas être loin!

Hors ligne

Haut de page ↑