terminal: copier un fichier sans l'ouvrir Le sujet est résolu

Demande d'aide : c'est ici.
Répondre
tony
Membre
Membre
Messages : 401
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

bonjour,

je trouve pratique cette solution lorsque je veux copier le contenu d'un fichier sans passer par Thunar, ou pour copier la sortie d'une commande lorsqu'elle est longue. Je voudrais utiliser

Code : Tout sélectionner

cat <fichier> | xclip -sel xclip
ou
stdout > f ; cat f | xclip -sel xclip
Malheureusement cette commande n'a pas l'air de se prêter à la création d'un alias, <fichier> étant non défini. Donc je pensais passer par un script qui l'exécuterait après m'avoir demandé le chemin pour trouver le fichier en question.
Mais peut-être y a-t-il une solution plus simple?
Debian 12/ Xfce
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5852
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

Tu as la commande cp qui est faite pour ça https://www.man7.org/linux/man-pages/man1/cp.1.html
si tu ne veux copier que le contenu

Code : Tout sélectionner

cat fichier > fichier1
tony
Membre
Membre
Messages : 401
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

piratebab a écrit : 07 févr. 2025, 19:02 Tu as la commande cp qui est faite pour ça https://www.man7.org/linux/man-pages/man1/cp.1.html
si tu ne veux copier que le contenu

Code : Tout sélectionner

cat fichier > fichier1

Code : Tout sélectionner

man cat
cat - Concaténer des fichiers et les afficher sur la sortie standard
je n'avais jamais regardé ce que pouvait faire cette commande tellement j'étais persuadé qu'elle ne faisait qu'afficher un texte. C'est le "afficher sur stdout" qui change tout. J'ai quand même appris qq chose sur xclip.

Merci pour l'info, ça correspond exactement à ce qui m'intéresse. Je me suis assez embêté avec les sélections à la souris, une amélioration de plus.

PS: je viens de voir qu'elle peut aussi mettre 2 fichiers bout à bout.... on ne lit jamais assez le manuel avant d'utiliser une commande.
Debian 12/ Xfce
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5852
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

ce n'est pas cat qui fait ça. C'est > pour mettre dans un fichier, ou >> pour ajouter dans un fichier
tony
Membre
Membre
Messages : 401
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

piratebab a écrit : 07 févr. 2025, 23:16 ce n'est pas cat qui fait ça. C'est > pour mettre dans un fichier, ou >> pour ajouter dans un fichier
je m'excuse, ma question n'était pas assez précise et je me suis emballé trop vite sur la réponse: je veux copier le contenu d'un fichier pour pouvoir le transférer non pas dans un autre fichier, mais sur ce site, par exemple dans ce cadre afin que je puisse facilement sélectionner et garder uniquement les parties que je veux porter à la connaissance du lecteur. C'est plus pratique que de faire une sélection avec la souris et dans le terminal.

Il me faut donc une commande capable de copier puis de coller du texte sans ouvrir le fichier source. Ce que fait la commande "xclip -sel xclip": elle utilise le tampon primaire pour copier et la molette pour coller.

exemple: j'ai une question à poser qui concerne certaines parties de mon fichier .bashrc, donc: cat .bashrc | xclip -sel xclip puis copie sur le forum, suivie d'une sélection des parties d'intérêt qui serviront de base à ma question.

La 2ème forme avec "stdout > f etc.." peut aussi être utile en cas de question sur une sortie de commande qui serait assez longue, enfin il me semble, surtout s'il s'agit de la sortie de la commande "less".

Comme cette commande est un peu longue je voudrais lui associer une commande type raccourci, comme un alias. Mais à cause de la partie variable <nom du fichier> l'alias ne convient pas, donc que choisir? Je pensais à un script mais il y a peut-être plus simple?
Debian 12/ Xfce
tony
Membre
Membre
Messages : 401
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

en attendant j'ai écrit cette commande qui fonctionne:

Code : Tout sélectionner

~$ read -p "fichier" fichier ; $nom xclip -sel xclip
j'ai parlé trop vite: elle a fonctionné une seule fois.

Problème réglé, j'avais oublié la partie "cat $fichier |". Le script associé fonctionne bien:

Code : Tout sélectionner

#!/bin/bash
# copier
 
read -p "fichier" fichier ; cat $fichier | xclip -sel xclip
Debian 12/ Xfce
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5852
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

si "fichier" est quelque chose de variable que tu doit renter à chaque fois, tu peux le passer en paramètre au lancement du script.
tony
Membre
Membre
Messages : 401
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

piratebab a écrit : 08 févr. 2025, 11:04 si "fichier" est quelque chose de variable que tu doit renter à chaque fois, tu peux le passer en paramètre au lancement du script.
fichier est une variable et si j'ai bien compris ce que je viens de lire une variable est un type de paramètres. Donc je ne comprends pas le "passer en paramètre au lancement". Ce script me demande de rentrer sa valeur à chaque lancement, bien obligé, et puis c'est tout, il se débrouille tout seul. Comment améliorer ce comportement= ? pour moi. Faut dire que je ne connais vraiment pas grand chose sur les scripts.

PS: librecours.netm'a peut-être éclairé:

Code : Tout sélectionner

~$ copier copier

#!/bin/bash
# copier

cat  $1 | xclip -sel xclip
obtenu en utilisant le script "copier" amélioré.
Debian 12/ Xfce
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5852
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

c'est ce que je voulais dire. $1 représente le premier argument passé à notre script, c'est a dire le nom du fichier source. Si tu veux aussi rentrer le nom du fichier destination, ce sera le $2.
Pour faire plus "pro", tu peux vérifier si un de ces arguments est vide, et renvoyer dans ce cas un texte à l'utilisateur lui rappelant qu'il faut absolument rentrer un nom de fichier.
tu trouveras des tas d'exemples sur le net.
tony
Membre
Membre
Messages : 401
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

je n'ose pas imaginer la galère que ça devait être pour les nouveaux utilisateurs de Linux avant l'ère internet telle qu'on la connaît ajdh.
Debian 12/ Xfce
Avatar de l’utilisateur
zargos
Membre
Membre
Messages : 197
Inscription : 07 juil. 2023, 13:34
Status : Hors-ligne

tony a écrit : 10 févr. 2025, 11:39 je n'ose pas imaginer la galère que ça devait être pour les nouveaux utilisateurs de Linux avant l'ère internet telle qu'on la connaît ajdh.
Il n'y en avait quasiment pas, et la plupart venaient du monde Unix. Après c'est quoi "l'ère internet telle qu'on la connaît ajdh"
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5852
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

on allait dans les bibliothèques ou chez les libraires .
Avatar de l’utilisateur
zargos
Membre
Membre
Messages : 197
Inscription : 07 juil. 2023, 13:34
Status : Hors-ligne

piratebab a écrit : 10 févr. 2025, 14:11 on allait dans les bibliothèques ou chez les libraires .
C'était le temps où nous avions des étagères :D
J'en ai toujours ceci dit, j'en ai même rajouter une, pour des livres, masi pas informatique cependant.
tony
Membre
Membre
Messages : 401
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

piratebab a écrit : 09 févr. 2025, 19:39 ......
Pour faire plus "pro", tu peux vérifier si un de ces arguments est vide, et renvoyer dans ce cas un texte à l'utilisateur lui rappelant qu'il faut absolument rentrer un nom de fichier.
tu trouveras des tas d'exemples sur le net.
et donc, un script de pro et qui fonctionne:

Code : Tout sélectionner

#!/bin/bash
# copier
if [ -z "$1" ]
then
  echo "No argument supplied"
  exit 1
fi
cat  $1 | xclip -sel xclip
pour un pro ça doit avoir une utilité, pour moi je ne vois pas.
Debian 12/ Xfce
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5852
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

De façon générale, pour tout script ou programme, ne jamais faire confiance aux entrées des utilisateurs!
Tu peux pousser plus loin en vérifiant que l'argument passé est bien un fichier.
Je viens de tester le chat de mistral AI. Sa génération de code est assez bluffante.
Exemple
Pour vérifier que le premier argument d'un script Bash n'est pas vide et qu'il s'agit bien d'un fichier existant, vous pouvez utiliser une structure conditionnelle dans votre script. Voici un exemple de script qui réalise ces vérifications :

Code : Tout sélectionner

#!/bin/bash

# Vérifier que le premier argument n'est pas vide
if [ -z "$1" ]; then
    echo "Erreur : Aucun argument fourni."
    echo "Usage : $0 <nom_du_fichier>"
    exit 1
fi

# Vérifier que le premier argument est un fichier existant
if [ ! -f "$1" ]; then
    echo "Erreur : Le fichier '$1' n'existe pas."
    exit 1
fi

# Si les vérifications sont passées, vous pouvez continuer avec le reste de votre script
echo "Le fichier '$1' existe et est prêt à être traité."

# Ajoutez ici le reste de votre script pour traiter le fichier
Explications :

[ -z "$1" ] : Cette condition vérifie si le premier argument ($1) est vide. Si c'est le cas, le script affiche un message d'erreur et se termine avec exit 1.
[ ! -f "$1" ] : Cette condition vérifie si le premier argument n'est pas un fichier existant (-f vérifie l'existence d'un fichier). Si le fichier n'existe pas, le script affiche un message d'erreur et se termine avec exit 1.
echo "Usage : $0 <nom_du_fichier>" : Affiche un message d'utilisation pour informer l'utilisateur de la manière correcte d'utiliser le script.
Répondre