#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
hello
essayercommande $(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
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
xargs -a fichier -I{} chown... "{}"
?
Là tu appelles chown autant de fois qu'il y a de fichiers
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