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 29/03/2017, à 09: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, à 13:53)

Hors ligne

#2 Le 29/03/2017, à 11: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, à 11:11)

Hors ligne

#3 Le 29/03/2017, à 12: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, à 13: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, à 14:04)

Hors ligne

#5 Le 29/03/2017, à 13: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, à 13: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, à 13:54)

Hors ligne

#7 Le 29/03/2017, à 14: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, à 14:09)

Hors ligne

#8 Le 29/03/2017, à 14: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, à 16:52)

Hors ligne

#9 Le 29/03/2017, à 15: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, à 16: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
smile

Dernière modification par MicP (Le 29/03/2017, à 16:51)

Hors ligne