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 21/06/2011, à 16:04

Pharaon12

Effacer le contenu d'un fichier

Bonjour
J'aimerais savoir quelle commande à utiliser pour effacer le contenu d'un fichier texte sans effacer le fichier lui même.
Merci pour votre aide

Hors ligne

#2 Le 21/06/2011, à 16:16

f.x0

Re : Effacer le contenu d'un fichier

Bonjour Pharaon12,

Est-ce que cela répondrait à tes attentes
A faire dans un terminal

> test.txt

Dernière modification par f.x0 (Le 21/06/2011, à 16:17)


SOPI

Hors ligne

#3 Le 21/06/2011, à 21:23

Pharaon12

Re : Effacer le contenu d'un fichier

Bonsoir
Il n'y aurait pas une autre méthode?? parce que celle là me génère des problèmes quand je veux afficher le contenu du fichier ou d'y réécrire.

Dernière modification par Pharaon12 (Le 21/06/2011, à 21:24)

Hors ligne

#4 Le 21/06/2011, à 21:30

f.x0

Re : Effacer le contenu d'un fichier

Si tu as des problèmes quand tu veux afficher le contenu du fichier ou réécrire, c'est que
ton fichier ne doit pas être au format .txt, car cela fonctionne nickel pour moi dans ce cas.
Quel type de fichier est concerné ?


SOPI

Hors ligne

#5 Le 21/06/2011, à 22:59

Pharaon12

Re : Effacer le contenu d'un fichier

Un fichier texte. J'ai modifié l'extension en ajoutant une extension .txt à la fin mais le problème persiste. Le truc c'est que "en parallèle" une autre commande "remplit" le fichier via la redirection du flux. (la commande >). Bien sûr ils sont dans l'ordre dans mon script:
je veux vider le contenu, puis le remplir par la sortie d'une commande et comparer le contenu du fichier avec celui d'un fichier test (via la commane diff).
Le résultat de la comparaison est que le deux fichiers différents en binaire

Hors ligne

#6 Le 21/06/2011, à 23:09

f.x0

Re : Effacer le contenu d'un fichier

C'est donc un script que tu fais, alors cela change pas mal de chose.
Je crois qu'il faut passer par le paramètre nul, mais je suis loin d'être un Kador en bash,
je pense que tu devrais annuler ce post et le refaire en le postant dans la rubrique Trucs, astuces et scripts utiles de ce forum.

Mais bon tu fais comme bon te semble, mais perso je préfére passer la main à un UBUNTEROS éclairé.


SOPI

Hors ligne

#7 Le 21/06/2011, à 23:31

aduxas

Re : Effacer le contenu d'un fichier

Si tu rediriges la sortie d'un programme dans un fichier avec "programme > fic", à moins que l'option noclobber ne soit mise, cela va t'écraser complètement "fic".  Tu ne peux influencer le type de ce fichier en changeant son extension car son type ne dépend que du type de sorties du programme.  Tu n'as donc pas besoin de vider ton fichier, la redirection s'en charge.
Que veux-tu dire par "en parallèle"? J'espère que tu ne travailles pas sur le fichier pendant qu'il est en train d'être écrit?  C'est quelque chose comme ça, ton script?

programme > fic
diff fic ref

Dernière modification par aduxas (Le 21/06/2011, à 23:34)

Hors ligne

#8 Le 21/06/2011, à 23:32

FRUiT

Re : Effacer le contenu d'un fichier

Pourquoi tu veux pas le supprimer ?


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#9 Le 22/06/2011, à 12:09

Pharaon12

Re : Effacer le contenu d'un fichier

@ FRuit : je ne veux pas le supprimer car c'est un fichier que je dois rafraichir (mon script est comme un système de surveillance si tu veux)
@ aduxas: oui c'est un peu ce que je fais. Est ce que c'est maladroit de ma part ??

Hors ligne

#10 Le 22/06/2011, à 13:43

FRUiT

Re : Effacer le contenu d'un fichier

Pharaon12 a écrit :

@ FRuit : je ne veux pas le supprimer car c'est un fichier que je dois rafraichir (mon script est comme un système de surveillance si tu veux)

Et bien je vois toujours pas ou est le problème...

Tu peux très bien faire :

rm le.fichier
echo "whatever" >>le.fichier

Si le fichier n'existe pas, il est créé...

Ou alors j'ai raté quelque chose...

Dernière modification par FRUiT (Le 22/06/2011, à 19:13)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#11 Le 22/06/2011, à 15:54

Pharaon12

Re : Effacer le contenu d'un fichier

le truc c'est que je veux éviter de réécrire dans le fichier avec "echo" puisque comme j'ai dit cela me génère des erreurs.

Hors ligne

#12 Le 22/06/2011, à 16:01

FRUiT

Re : Effacer le contenu d'un fichier

Non mais echo c'est un exemple...

Tu peux rediriger la sortie de n'importe quoi vers un fichier n'existant pas, il sera créé pour l'occasion.

Ou alors donne un exemple précis, car là tu cherches un problème ou il n'y en a pas...


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#13 Le 22/06/2011, à 16:09

aduxas

Re : Effacer le contenu d'un fichier

En d'autre mots, pourquoi penses-tu que vider un fichier et le remplir de nouveau n'est pas la meme chose que l'écraser simplement.

Hors ligne

#14 Le 23/06/2011, à 14:45

Pharaon12

Re : Effacer le contenu d'un fichier

salut
c'est vrai que vider le fichier et l'écraser c'est un peu la même chose mais dans mon script j'aurais des problèmes si j'utilise cette méthode. je donne un aperçu de celui-ci

gnome-terminal
sleep 2
fenetre=`whoami`@`hostname`
utilisateur=`whoami`
id=`xdotool search --name "$fenetre" | head -n 1`
echo ${id}
xdotool type --window ${id} "rvlc"
sleep 2
xdotool type --window ${id} ">"
sleep 2
xdotool type --window ${id} "/home/$utilisateur/SNRT/output.txt"
sleep 1
xdotool key --window ${id} Return
sleep 6
xdotool type --window ${id} "volume 0"
sleep 1
xdotool key --window ${id} Return
sleep 2
xdotool type --window ${id} "add dvb-s://frequency=10872000:srate=27500000"
sleep 1
xdotool key --window ${id} Return
sleep 4
xdotool type --window ${id} "info"
sleep 1
xdotool key --window ${id} Return
sleep 2

diff -q /home/$utilisateur/SNRT/test /home/$utilisateur/SNRT/output.txt
resultat=$(echo $?)
if [ $resultat -eq 0 ]
then
echo 'Fichiers identiques'
else
diff /home/$utilisateur/SNRT/test /home/$utilisateur/SNRT/output.txt
aplay /home/$utilisateur/SNRT/alarm-snrt.wav
fi
while :
do
>/home/$utilisateur/SNRT/output.txt
xdotool type --window ${id} "info"
sleep 1
xdotool key --window ${id} Return
sleep 2
diff -q /home/$utilisateur/SNRT/test.txt /home/$utilisateur/SNRT/output.txt
resultat=$(echo $?)
if [ $resultat -eq 0 ]
then
echo 'Fichiers identiques'
else
diff /home/$utilisateur/SNRT/test.txt /home/$utilisateur/SNRT/output.txt
aplay /home/$utilisateur/SNRT/alarm-snrt.wav
fi
done

Comme vous pouvez remarquer, un processus (rvlc) est déjà entrain d'écrire dans ce fichier (et dans toute la boucle) si je le supprime il ne va pas le créer à nouveau puisque toute l'opération du script est considérée comme une seule redirection de sortie de flux.
J'ai travaillé avec un script avec lequel je termine le rvlc et j'y reviens. Naturellement, le fichier output s'écrase toute seul et je n'ai pas ce problème. Mais le problème avec cette méthode c'est qu'elle n'est pas rapide (environ 30 secondes). Je veux arriver à des temps d'éxéution relativement courts (de l'ordre de quelques secondes)
une méthode pour effacer le contenu à base de cut ou une autre commande (que la direction de flux) serait la bienvenue.
merci pour votre aide

Hors ligne

#15 Le 23/06/2011, à 16:59

FRUiT

Re : Effacer le contenu d'un fichier

Bon j'ai pas encore testé ton script là je suis sous win (soupir) je reviendrais poster. En attendant si l'option -q de diff existe, c'est pour l'utiliser comme ceci :

if diff -q /home/$utilisateur/SNRT/test.txt /home/$utilisateur/SNRT/output.txt; then
    echo 'Fichiers identiques'
else
    diff /home/$utilisateur/SNRT/test.txt /home/$utilisateur/SNRT/output.txt
    aplay /home/$utilisateur/SNRT/alarm-snrt.wav
fi

Et aussi, pas testé alors je pose la question, pourquoi faire tout ça :

xdotool type --window ${id} "rvlc"
sleep 2
xdotool type --window ${id} ">"
sleep 2
xdotool type --window ${id} "/home/$utilisateur/SNRT/output.txt"
sleep 1

Au lieu de :

xdotool type --window ${id} "rvlc >/home/$utilisateur/SNRT/output.txt"
sleep 1

Et aussi (mais bon ça ne devrait plus te servir pour ce script là) :
On n'écrit pas :

resultat=$(echo $?)

mais :

resultat=$?

Et aussi, au lieu de :

/home/$utilisateur/SNRT/output.txt

Utilise plutôt la variable prédéfinie HOME :

$HOME/SNRT/output.txt

Dernière modification par FRUiT (Le 23/06/2011, à 17:29)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#16 Le 26/06/2011, à 15:18

Pharaon12

Re : Effacer le contenu d'un fichier

je n'utilise pas  le

xdotool type --window ${id} "rvlc >/home/$utilisateur/SNRT/output.txt"
sleep 1

parce que l'ordinateur avec lequel je travaille est pas très costaud (environ 498 Mo de Ram sad ) et lorsque j'écris cette commande il m'affiche dans le terminal toute la commande à part le ">" remarque que cette commande je l'utilise dans mon ordinateur personnel et ça marche à merveille. A moins que je n'utilise une version de xdotool pas très à jour dans l'ordinateur dans lequel je travaille.

Hors ligne