#1 Le 29/03/2017, à 08:35
- pablofr
[RÉSOLU] Aide pour transformer une ligne de commande en script
Bonjour à tous,
J'ai une ligne de commande qui fait bien son job :
find /documents/ ! -path "*/system/*" ! -path "*/logs/*" -perm 755| xargs -I {} chmod 664 "{}"
Je la lance avec un cron en * * * * *
J'aimerai qu'elle m'envoie par mail (ou stock dans un fichiers) les fichiers qu'elle a détecté en 755 avant de modifier les droits.
En ajoutant > /root/fichiers.txt à la fin de la commande cela ne stock rien, mais je pense que c'est normale.
Il faudrait sans doute créer un vrais script.
Avez vous des idées ?
Merci
Dernière modification par pablofr (Le 29/03/2017, à 12:53)
Hors ligne
#2 Le 29/03/2017, à 10:04
- soshy
Re : [RÉSOLU] Aide pour transformer une ligne de commande en script
Salut,
je dirais un truc du genre:
find /documents/ ! -path "*/system/*" ! -path "*/logs/*" -perm 755| tee -a /root/fichiers.txt | xargs -I {} chmod 664 "{}"
Faut faire attention, on ne fait qu'ajouter au fichier. Donc entre 2 executions on cumule et on ne remplace pas le contenu. Si tu veux remplacer le contenu il faudrait plutot faire:
find /documents/ ! -path "*/system/*" ! -path "*/logs/*" -perm 755| tee /root/fichiers.txt | xargs -I {} chmod 664 "{}"
Dernière modification par soshy (Le 29/03/2017, à 10:11)
Hors ligne
#3 Le 29/03/2017, à 11:50
- pablofr
Re : [RÉSOLU] Aide pour transformer une ligne de commande en script
Merci pour ta réponse, je suis bien pour garder le -a et avoir un archivage de se qui a été modifié, je ne connaissais pas tee, mais cela à l'aire sympa.
Ta commande enregistre bien dans /root/fichiers.txt,
Par contre cela exécute plus xargs -I {} chmod 664 "{}"
Selon ce que je vois cela devrait bien fonctionner : http://www.linux-france.org/article/memo/node11.html
Une piste ?
Hors ligne
#4 Le 29/03/2017, à 12:24
- MicP
Re : [RÉSOLU] Aide pour transformer une ligne de commande en script
Bonjour
find /documents/ ! -path "*/system/*" ! -path "*/logs/*" -perm 755 -exec sh -c 'echo "{}" >> /root/fichiers.txt; chmod 644 "{}"' \;
Dernière modification par MicP (Le 29/03/2017, à 13:04)
Hors ligne
#5 Le 29/03/2017, à 12:41
- soshy
Re : [RÉSOLU] Aide pour transformer une ligne de commande en script
Si ta commande fonctionnait initialement, je ne vois pas de raison a ce que rajouter tee au milieu empeche l'execution de la suite.
Une manip similaire chez moi fonctionne bien:
xxx@xxx-desktop:/tmp$ ls test/
a.txt b.txt
xxx@xxx-desktop:/tmp$ find test/ -iname '*.txt' | tee out.txt | xargs -I {} cp "{}" "{}".2
xxx@xxx-desktop:/tmp$ cat out.txt
test/a.txt
test/b.txt
xxx@xxx-desktop:/tmp$ ls test/
a.txt a.txt.2 b.txt b.txt.2
Hors ligne
#6 Le 29/03/2017, à 12:53
- pablofr
Re : [RÉSOLU] Aide pour transformer une ligne de commande en script
Merci à tous !
@MicP, ta solution fonctionne parfaitement bien (je pense un peu plus lent qu'avant, mais fait le job)
Merci !
Pablo
Dernière modification par pablofr (Le 29/03/2017, à 12:54)
Hors ligne
#7 Le 29/03/2017, à 13:09
- MicP
Re : [RÉSOLU] Aide pour transformer une ligne de commande en script
Je ne connais pas très bien find.
Je pense que le ralentissement est dû au fait que j'utilise un sous-shell (/bin/sh) pour lancer la suite de commandes pour chacun des fichiers trouvés.
Il doit très certainement exister une syntaxe plus efficace.
Dernière modification par MicP (Le 29/03/2017, à 13:09)
Hors ligne
#8 Le 29/03/2017, à 13:18
- MicP
Re : [RÉSOLU] Aide pour transformer une ligne de commande en script
Peut-être plus rapide avec une boucle while read …
find /documents/ ! -path "*/system/*" ! -path "*/logs/*" -perm 755 -print0 | while read -d ''; do echo "${REPLY}" >> /root/fichiers.txt; chmod 644 "${REPLY}"; done
EDIT : Modifié en fonction du message suivant.
Dernière modification par MicP (Le 29/03/2017, à 15:52)
Hors ligne
#9 Le 29/03/2017, à 14:50
- Watael
Re : [RÉSOLU] Aide pour transformer une ligne de commande en script
salut,
find...-print0 | while read -d ''...
attention aux noms de fichers exotiques.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#10 Le 29/03/2017, à 15:40
- MicP
Re : [RÉSOLU] Aide pour transformer une ligne de commande en script
Merci beaucoup pour la remarque.
Je prends note et je corrige mon précédent message
Dernière modification par MicP (Le 29/03/2017, à 15:51)
Hors ligne