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 04/04/2020, à 10:54

arnoxz

Comment remplacer la valeur d'une commande par un fichier texte (liste

Bonjour,

J'aimerais affecter une commande d'une liste.txt.

Pour clarifier, j'ai créé une liste contenant des noms de fichiers d'un dossier.

J'aimerais qu'une commande agisse sur eux.

par exemple exécuter un : chmod ****nom_util*** sur la liste.txt
j'ai le même problème avec la commande find (option -exec)....

Je ne parviens pas à "lire" le contenu de la liste pour que la commande agisse sur les fichiers (j'ai essayé avec un pipe (|) en incluant un cat... mais pas de résultat....

merci

Dernière modification par arnoxz (Le 04/04/2020, à 10:54)

Hors ligne

#2 Le 04/04/2020, à 11:03

elcastor

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

En gros, tu veux entrer le contenu de ton fichier liste.txt comme argument de la commande c'est ça ? Je pense que les "pipe" sont effectivement fait pour  ça, mais le mieux serait de copier toute ta commande ici pour qu'on comprenne quelle partie de la syntaxe est erronée.

Hors ligne

#3 Le 04/04/2020, à 11:10

credenhill

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

hello
essayer

commande $(cat fichier.txt)

Hors ligne

#4 Le 04/04/2020, à 11:10

arnoxz

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

oui c'est ça :-)

un essai pour exemple (évidemment cela ne fonctionne pas, mais c'est l'idée)

chown -v arnoxz:arnoxz < liste.txt

Hors ligne

#5 Le 04/04/2020, à 11:12

arnoxz

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

ou aussi dans l'idée : mais plus tordu

 find -user_untel (ou liste.txt  -exec chown -v arnoxz:arnoxz {} \;

Dernière modification par arnoxz (Le 04/04/2020, à 11:13)

Hors ligne

#6 Le 04/04/2020, à 11:17

arnoxz

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

credenhill a écrit :

hello
essayer

commande $(cat fichier.txt)

hello,

[EDIT] SUPER ! cela fait le taf, merci beaucoup !

sudo chown -v arnoxz:arnoxz $(cat liste.txt)

Bonne journée !

Dernière modification par arnoxz (Le 04/04/2020, à 11:24)

Hors ligne

#7 Le 04/04/2020, à 11:35

pingouinux

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

Bonjour,
Attention, la commande en #6 ne marchera pas si les noms de fichiers contiennent des espaces.

Hors ligne

#8 Le 04/04/2020, à 11:56

ar barzh paour

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

peut-être ainsi

#! /bin/bash
while read ligne
do
   # remplacer cat par la commande voulue
   [[ -n "$ligne" ]] && cat  "$ligne"
done < liste.txt

ou en ligne de commande

 while read ligne; do    [[ -n "$ligne" ]] && cat  "$ligne"; done < liste.txt

PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#9 Le 04/04/2020, à 12:32

elcastor

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

[résolu] du coup ?

Hors ligne

#10 Le 04/04/2020, à 13:00

kamaris

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

Ou bien

xargs -d'\n' commande < liste.txt

Pour find, si j'ai bien compris ce que tu veux faire (appliquer la commande à la sotie de find et au contenu de liste.txt) :

find répertoire -option | cat - liste.txt | xargs -d'\n' commande

On peut éventuellement intercaler une commande, pour enlever les doublons de la concaténation de la sortie de find et de liste.txt :

find répertoire -option | cat - liste.txt | awk '!a[$0]++' | xargs -d'\n' commande

Hors ligne

#11 Le 04/04/2020, à 14:21

credenhill

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

un nom par ligne si il y a des espaces

cmd $(sed 's/^.*$/"&"/' fichier)

Hors ligne

#12 Le 04/04/2020, à 15:47

kamaris

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

C'est un peu réinventer la roue, quand xargs le fait en gérant la longueur maximale de la ligne de commande neutral

Hors ligne

#13 Le 05/04/2020, à 01:19

Watael

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

xargs -a fichier -I{} chown... "{}"

?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 05/04/2020, à 07:45

moko138

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

Pas besoin de liste préalable.
La commande suivante marchera même si le nom du répertoire et les noms de fichiers contiennent des espaces :

find "répertoire au nom à espaces" -maxdepth 1 -type f -print0 | xargs -0 sudo chown -c arnoxz:arnoxz

%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#15 Le 05/04/2020, à 11:35

kamaris

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

Watael a écrit :
xargs -a fichier -I{} chown... "{}"

?

Là tu appelles chown autant de fois qu'il y a de fichiers sad

Hors ligne

#16 Le 05/04/2020, à 15:36

Watael

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

mon "effort" portait sur la manière de passer le fichier à xargs.
la redirection est-elle indispensable pour appliquer l'option -d ?

bien sûr, il faudrait revenir sur la raison de ce fichier.
n'est-ce qu'un fichier temporaire ?
...


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#17 Le 05/04/2020, à 16:46

kamaris

Re : Comment remplacer la valeur d'une commande par un fichier texte (liste

Oui, effectivement : ce que j'ai écrit plus haut pourrait avantageusement utiliser l'option -a :

xargs -a liste.txt -d'\n' commande

Hors ligne