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 15/04/2016, à 10:17

2012alex2311

[résolu] Effacer un dossier + remplacer un fichier par un autre

Salut à tous,

J'aurais aimé savoir s'il était possible avec un fichier .sh (ou autrement) d'effacer un répertoire, svp ?
Par exemple, pour un jeu, je dois régulièrement vider (effacer) le dossier "Cache". A chaque fois, je dois aller dans le répertoire, etc... Je me demandais, s'il n'y avait pas un moyen de créer une fichier qui l'effacerait directement quand je clique dessus ?

Deuxième question, est-il possible de faire la même chose mais pour remplacer un fichier par un fichier du même nom mais venant d'un autre répertoire, ou bien renommer un fichier étant dans le même répertoire afin de prendre la place de l'autre.
Par exemple :
un fichier A et un fichier B dans le même répertoire ou dans un répertoire différent.
Je remplace A par B.
Et quand j'ai finis, avec un autre script, je remplace B par A.

Merci d'avance de votre aide.
Bonne journée.

Dernière modification par 2012alex2311 (Le 18/04/2016, à 18:23)

Hors ligne

#2 Le 15/04/2016, à 10:35

cqfd93

Re : [résolu] Effacer un dossier + remplacer un fichier par un autre

Bonjour,

Oui, tout ça est possible, à coup de rm et mv.


cqfd93

En ligne

#3 Le 15/04/2016, à 10:37

Nuliel

Re : [résolu] Effacer un dossier + remplacer un fichier par un autre

Bonjour,

Pour la première question, le code du script (par exemple script.sh) est:

#!/bin/bash
rm -r /chemin/absolu/vers/Cache/*

Pour l’exécuter avec nautilus, il faut aller dans édition->préférences->comportement->cocher demander à chaque fois pour que tu puisses choisir entre afficher ou exécuter un script. Puis

chmod u+x script.sh

pour rendre le script exécutable.

Je ne comprends pas la deuxième question mais ça devrait se faire sans trop de problèmes à coup de mv.

Dernière modification par Nuliel (Le 15/04/2016, à 10:49)

Hors ligne

#4 Le 18/04/2016, à 14:28

LeoMajor

Re : [résolu] Effacer un dossier + remplacer un fichier par un autre

pour un jeu

Bonjour,
Tu as incron pour surveiller les évènements sur les fichiers, les dossiers. La difficulté pour surveiller des évènements sur une application, est qu'elle peut être mono-pid, ou multi-pid, et que tu ne surveilles pas le bon pid, le bon exécutable.
J'ai fait des tests sur 0ad, chromium-browser, firefox et mon incron fonctionne très bien.

par exemple;
incrontab -l

/usr/lib/chromium-browser/chromium-browser IN_ALL_EVENTS,IN_NO_LOOP /usr/local/bin/application_events.sh $@ $# $%

si tu mets par exemple /usr/bin/chromium-browser ou /usr/bin/firefox,  /usr/local/bin/application_events.sh te dira que ce n'est pas l'origine de l'application. Tu perds le focus sur les évènements et le log sera erratique.
/usr/bin/firefox --> /usr/lib/firefox/firefox
/usr/bin/chromium-browser ---> /usr/lib/chromium-browser/chromium-browser
/usr/games/pyrogenesis  -->  /usr/games/pyrogenesis

cat  /usr/local/bin/application_events.sh

#!/bin/bash

# Display X si notify-send
export DISPLAY=:0

logfile=/home/toto/incron_application.log
ev[0]=$(date --rfc-3339=seconds); ev[1]=$1; ev[2]=$2; ev[3]=$3;
ev[4]=$(date +'%S%N')
last_record=( $(awk 'END { print $4" "$5" "$6 }' ${logfile}) )

application=$(basename $1)
ppidA=( $(ps xao ppid,pid,cmd |  awk -v appli="$application" '$3~appli {ppids[$1]++; pids[$2]++; cmds[$1]=$3 }; END { for(ppid in ppids) if(!(ppid in pids) && !(cmds[ppid]~/awk|grep/)){print ppid,cmds[ppid]} }') )

#mono-pid vs multi-pids, perte d'évènements, de focus
if [ "${#ppidA[@]}" -eq 2 ]; then
 if [ "x${ppidA[1]}" != "x${ev[1]}" ] &&  [ -f "${ppidA[1]}" ] ; then
 message="erreur fatale: perte de focus ou application multi-pids\nremplacer ${ev[1]} par ${ppidA[1]}\n dans incrontab ou regle incron.d. + sudo service incron reload\n"
 echo -e "$message" >> ${logfile}
 notify-send "erreur fatale. ${logfile}"
 exit -1

 fi

 pid=1
else pid=0
fi

ev[5]=$pid

if [ "$pid" -eq 1 ] && [ "x${last_record[2]}" == "x0" ]; then ev[6]="start"; notify-send "application $application ouverte" ;fi
if [ "$pid" -eq 1 ] && [ "x${last_record[2]}" == "x1" ]; then ev[6]="start++"; fi
if [ "$pid" -eq 1 ] && [ "x${last_record[2]}" == "x" ]; then ev[6]="start"; notify-send "application $application ouverte"; fi; #init si logfile est vide

if [ "$pid" -eq 0 ] && [ "x${last_record[2]}" == "x1" ]; then ev[6]="close"; notify-send "application $application fermée"; fi
if [ "$pid" -eq 0 ] && [ "x${last_record[2]}" == "x0" ]; then ev[6]="close++"; fi
if [ "$pid" -eq 0 ] && [ "x${last_record[2]}" == "x" ]; then ev[6]="close"; notify-send "application $application fermée"; fi; # init si logfile est vide

echo "${ev[@]}" >> ${logfile}

type de log que tu pourrais avoir
cat ~/incron_application.log

 
erreur fatale: perte de focus ou application multi-pids
remplacer /usr/bin/firefox par /usr/lib/firefox/firefox
 dans incrontab. + service incron reload

2016-04-18 12:53:56+02:00 /usr/lib/firefox/firefox  IN_OPEN 56241836478 1 start
2016-04-18 12:54:17+02:00 /usr/lib/firefox/firefox  IN_CLOSE_NOWRITE 17691630782 0 close
2016-04-18 12:56:00+02:00 /usr/games/pyrogenesis  IN_OPEN 00076026466 1 start
2016-04-18 12:56:00+02:00 /usr/games/pyrogenesis  IN_ACCESS 00841820940 1 start++
2016-04-18 12:56:00+02:00 /usr/games/pyrogenesis  IN_OPEN 00842641371 1 start++
2016-04-18 12:56:00+02:00 /usr/games/pyrogenesis  IN_CLOSE_NOWRITE 00843198215 1 start++
2016-04-18 12:56:07+02:00 /usr/games/pyrogenesis  IN_CLOSE_NOWRITE 07576867597 0 close
2016-04-18 13:17:17+02:00 /usr/bin/chromium-browser  IN_OPEN 17638256770 0 close++
erreur fatale: perte de focus ou application multi-pids
remplacer /usr/bin/chromium-browser par /usr/lib/chromium-browser/chromium-browser
 dans incrontab ou regle incron.d. + sudo service incron reload

2016-04-18 13:19:00+02:00 /usr/lib/chromium-browser/chromium-browser  IN_OPEN 00895590565 1 start
2016-04-18 13:19:01+02:00 /usr/lib/chromium-browser/chromium-browser  IN_OPEN 01314848589 1 start++
2016-04-18 13:19:01+02:00 /usr/lib/chromium-browser/chromium-browser  IN_OPEN 01723787570 1 start++
2016-04-18 13:19:01+02:00 /usr/lib/chromium-browser/chromium-browser  IN_OPEN 01899064773 1 start++
2016-04-18 13:19:02+02:00 /usr/lib/chromium-browser/chromium-browser  IN_OPEN 02349590988 1 start++
2016-04-18 13:20:21+02:00 /usr/lib/chromium-browser/chromium-browser  IN_CLOSE_NOWRITE 21668819207 0 close

ensuite tu as juste à insérer des fonctions, procédures, pour faire telle action, à l'exemple de notify-send.
un lsof -p ${ppidA[0]} devrait fonctionner aussi, pour voir les fichiers ouverts de l'application à l'instant t (pas vérifié)

Hors ligne

#5 Le 18/04/2016, à 15:04

erresse

Re : [résolu] Effacer un dossier + remplacer un fichier par un autre

@LeoMajor: Tu es sûr de ne pas t'être trompé de sujet en postant cette réponse ???
Il ne s'agit que de supprimer un dossier ou de renommer un fichier, là...


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#6 Le 18/04/2016, à 15:15

2012alex2311

Re : [résolu] Effacer un dossier + remplacer un fichier par un autre

Bonjour,
Merci beaucoup

ublender a écrit :

Bonjour,

Pour la première question, le code du script (par exemple script.sh) est:

#!/bin/bash
rm -r /chemin/absolu/vers/Cache/*

Merci, au début, j'ai galéré un peu, puis j'ai compris qu'il fallait mettre un "\' s'il y avait des espaces dans le nom du dossier.
Du coup, j'ai créé un lanceur pour le mettre dans la barre des raccourcis car je n'arrivais pas à mettre le fichier .sh directement dans la barre des raccourcis.

Pour la deuxième question, j'ai essayé de bidouiller. L'idée, c'était de remplacer un fichier par un autre fichier du même nom sans l'effacer.
Par contre, j'aurais besoin d'aide, svp, car j'ai essayé quelque chose et ça ne marche pas.
Je pensais créer deux  fichiers .sh avec un code du genre (et un second faisant l'inverse) :

#!/bin/bash
mv /chemin/ou/se/situe/fichier.exe /chemin/ou/je/deplace/
mv /chemin/ou/se/situe/mon/deuxieme/fichier.exe /chemin/ou/se/situe/

Quand je lance le script, le fichier en question est le même.

Hors ligne

#7 Le 18/04/2016, à 16:27

erresse

Re : [résolu] Effacer un dossier + remplacer un fichier par un autre

Bonjour,
"Déplacer" un fichier suppose qu'il soit enregistré dans un nouvel emplacement ET supprimé de l'emplacement d'origine.
Si tu ne veux que "dupliquer" un fichier, il faut alors utiliser la commande "cp" (copy) et non "mv" (move).


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#8 Le 18/04/2016, à 17:04

pingouinux

Re : [résolu] Effacer un dossier + remplacer un fichier par un autre

Bonjour,
Je ferais ceci, qui conserve les deux fichiers d'origine :

ln -sf /chemin_du_premier_fichier/fichier.exe /chemin_ou_j_utilise_l_un_ou_l_autre/fichier.exe

ou

ln -sf /chemin_du_second_fichier/fichier.exe /chemin_ou_j_utilise_l_un_ou_l_autre/fichier.exe

Hors ligne

#9 Le 18/04/2016, à 18:15

2012alex2311

Re : [résolu] Effacer un dossier + remplacer un fichier par un autre

erresse a écrit :

Bonjour,
"Déplacer" un fichier suppose qu'il soit enregistré dans un nouvel emplacement ET supprimé de l'emplacement d'origine.
Si tu ne veux que "dupliquer" un fichier, il faut alors utiliser la commande "cp" (copy) et non "mv" (move).

Oui, c'est ce que je cherche à faire.

J'ai un ficher A dans un répertoire B.
Je veux envoyer le fichier A dans un répertoire C.
A la place, je veux mettre un autre fichier A dans le répertoire B.

Concernant le ln -sf, ça m'a fait quelque chose de bizarre. Le premier fichier est resté le même, dans le répertoire du second, j'ai eu un lien vers le premier fichier à la place de l'ancien fichier.

Hors ligne

#10 Le 18/04/2016, à 18:23

2012alex2311

Re : [résolu] Effacer un dossier + remplacer un fichier par un autre

Finalement, j'ai réussi à faire ce que je voulais, j'avais dû faire une faute de frappe.

Par contre, au final, j'ai bien fait deux fichiers .sh pour pouvoir inverser les deux.

Merci beaucoup de votre aide !

Hors ligne

#11 Le 18/04/2016, à 18:34

2012alex2311

Re : [résolu] Effacer un dossier + remplacer un fichier par un autre

Par contre, j'ai créé des lanceurs et quand je clique dessus, l'opération s'effectue correctement (aussi bien pour effacer le cache que pour déplacer les fichiers), mais le curseur reste bloqué en attente (facilement 30 secondes), c'est normal ? (espèce de petit rond avec un chargement à l'intérieur).

Car si je clique directement sur le script, je n'ai aucun problème, mais à chaque fois il me demande la confirmation entre afficher ou exécuter le script et je préfère que ça soit fait directement.

Hors ligne