If avec la commande find (modif de fichiers)
Résolu/Fermé
ludivine
-
Modifié le 5 oct. 2021 à 15:26
mamiemando Messages postés 33459 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 - 7 oct. 2021 à 12:20
mamiemando Messages postés 33459 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 - 7 oct. 2021 à 12:20
A voir également:
- If avec la commande find (modif de fichiers)
- Invite de commande - Guide
- Comment réduire la taille d'un fichier - Guide
- Commande terminal mac - Guide
- Explorateur de fichiers - Guide
- Wetransfer gratuit fichiers lourd - Guide
5 réponses
Je viens de modifier
... mais j'ai un soucis : il me prend en compte les répertoires du dessus. Moi, je ne veux que le répertoire
!/bin/bash if find /tmp/test/ -mmin -10 | xargs ls -l then echo 'Found something' else echo 'Found nothing' fi
... mais j'ai un soucis : il me prend en compte les répertoires du dessus. Moi, je ne veux que le répertoire
testqui est dans
/tmp/.
mamiemando
Messages postés
33459
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 janvier 2025
7 813
5 oct. 2021 à 15:33
5 oct. 2021 à 15:33
Bonjour,
Je n'ai pas très bien compris quel était ton problème dans la deuxième version.
Pour commencer, je ne vois pas l'intérêt de
Comme tu le vois ci-dessous,
Bonne chance
Je n'ai pas très bien compris quel était ton problème dans la deuxième version.
Pour commencer, je ne vois pas l'intérêt de
| xargs ls -là ce stade, donc je vais l'ignorer pour le moment.
Comme tu le vois ci-dessous,
/tmp/test1n'est pas listé, mais
/tmp/testet
/tmp/test/test2sont bien listés.
(mando@silk) (~) $ mkdir /tmp/test
(mando@silk) (~) $ find /tmp/test/ -mmin -10
/tmp/test/
(mando@silk) (~) $ touch /tmp/test1
(mando@silk) (~) $ find /tmp/test/ -mmin -10
/tmp/test/
(mando@silk) (~) $ touch /tmp/test/test2
(mando@silk) (~) $ find /tmp/test/ -mmin -10
/tmp/test/
/tmp/test/test2
Bonne chance
Merci pour ton aide .
J'ai fait une autre modification en suivant des forums.
Cette version fonctionne même si je ne comprends pas trop le
Je suis en train d'essayer de la modifier pour intégrer
J'ai fait une autre modification en suivant des forums.
#!/bin/bash if [[ -n $(find /tmp/test/ -mmin -5) ]] then echo 'Found something' else echo 'Found nothing' fi
Cette version fonctionne même si je ne comprends pas trop le
-nau début ?
Je suis en train d'essayer de la modifier pour intégrer
sshà mon
ifcar le dossier à checker se trouve sur un autre PC. Pour le moment je cherche encore
mamiemando
Messages postés
33459
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 janvier 2025
7 813
Modifié le 6 oct. 2021 à 11:05
Modifié le 6 oct. 2021 à 11:05
Bonjour Ludivine,
Cette version fonctionne même si je ne comprends pas trop le -n au début ?
Cette page recense les différents opérateurs que l'on peut utiliser dans un test en bash. Comme tu le verras, l'opérateur
Je suis en train d'essayer de la modifier pour intégrer un ssh à mon if car le dossier à checker se trouve sur un autre pc.
Tu peux lancer une commande shell via
Dans ton cas ça pourrait ressembler à ça :
Bonne chance
Cette version fonctionne même si je ne comprends pas trop le -n au début ?
Cette page recense les différents opérateurs que l'on peut utiliser dans un test en bash. Comme tu le verras, l'opérateur
-nvérifie si la chaîne testée (en l'occurrence, le résultat de ta commande
find) n'est pas la chaîne vide. C'est donc un peu plus rigoureux même si sans
-n, le code est tout aussi correct.
Je suis en train d'essayer de la modifier pour intégrer un ssh à mon if car le dossier à checker se trouve sur un autre pc.
Tu peux lancer une commande shell via
sshsimplement en la précédent de la commande
ssh login@machine, par exemple
ssh mando@localhost ls /. Note qu'il peut être intéressant de préparer une clé ssh qui permettra d'éviter d'avoir à taper ton mot de passe à chaque fois que tu utilises
ssh.
Dans ton cas ça pourrait ressembler à ça :
#!/bin/bash user="ludivine" host="11.22.33.44" if [[ -n $(ssh "$user"@"$host" find /tmp/test/ -mmin -5) ]] then echo 'Found something' else echo 'Found nothing' fi
Bonne chance
Bonjour mamiemando
Merci pour ton aide et ta precision sur le
je viens de faire une modification mais je ne sait pas trop comment concaténer ma commande pour qu'elle fonctionne.
Actuellement j'ai (error et logger sont des fonctions )
Mais dans mon cas là, je perds l'option
Merci pour ton aide et ta precision sur le
-n.
je viens de faire une modification mais je ne sait pas trop comment concaténer ma commande pour qu'elle fonctionne.
Actuellement j'ai (error et logger sont des fonctions )
if ${ssh} ${SSH_USER}@${IP_PC_INDUS} -p ${SSH_PORT} "find ${USERREP} -mmin -1" then logger "on continue" else error "pas de modifications" fi
Mais dans mon cas là, je perds l'option
-ncar je ne sais pas comment concaténer correctement le tout [].
mamiemando
Messages postés
33459
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 janvier 2025
7 813
>
ludivine
Modifié le 6 oct. 2021 à 12:08
Modifié le 6 oct. 2021 à 12:08
Voici ce que tu peux faire :
Exemple :
Quelques recommandations
Bonne chance
#!/bin/sh ssh_login="mando" ssh_host="localhost" ssh_port=22 ssh_prefix="ssh $ssh_login@$ssh_host -p $ssh_port" user_dir="/tmp/test" if [[ -n $($ssh_prefix find "$user_dir" -mmin -1) ]] then echo "on continue" else echo "pas de modifications" fi
Exemple :
(mando@silk) (~) $ bash toto.sh
mando@localhost's password:
find: ‘/tmp/test’: Aucun fichier ou dossier de ce type
pas de modifications
(mando@silk) (~) $ touch /tmp/test
(mando@silk) (~) $ bash toto.sh
mando@localhost's password:
on continue
Quelques recommandations
- Avec l'opérateur
$
tu peux omettre quand il n'y a pas d'ambiguités les accolades. J'ai donné la syntaxe avec car c'est la plus rigoureuse et ça permet de faire des trucs assez violents, genre crafter des noms de variables à partir des valeurs d'autres variables, mais ici on n'en n'a pas besoin. - Dans le cas général, une valeur de variable peut contenir des espaces, ce qui peut complètement casser ton programme (voire être un trou de sécurité) donc il faut autant que possible encadrer les valeurs de variables avec des guillemets ou des apostrophes, en particulier pour les noms de fichiers qui peuvent en contenir (e.g.
$user_dir
). Attention cependant, car tu ne peux/dois pas le faire partout (par exemple, si le fait pour$ssh_port
ou$ssh_host
,ssh
sera perdu). - Je te recommande pour les noms de dossiers d'utiliser le suffixe
_dir
, c'est ce qui est communément utilisé. - Au sujet des noms de variables, tu peux utiliser des majuscules ou des minuscules. Personnellement j'ai tendance à utiliser des minuscules pour les variables internes et des majuscules pour les variables externes (construites à partir des arguments passés au script shell, e.g
$1
,$2
etc.). Dans d'autre langages, on réserve les noms de variables majuscules aux constantes globales. - Toujours à ce sujet, je t'invite à les nommer de manière consistante, claire, et en "prévision du futur" est toujours une bonne idée. Par exemple, le préfixe
ssh_
permet de trouver avec l'auto-complétion toutes les variables liées à ssh, améliore la lisibilité, et permet d'éviter un renommage si ton script implique par la suite un autre service réseau.
Bonne chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Un énorme merci pour ce message clair je viens d'apprendre plein de nouvelles choses.
J'ai encore beaucoup beaucoup de choses à apprendre sur le scripting shell.
Encore merci pour ton aide précieuse.
Je te souhaite une bonne journée
J'ai encore beaucoup beaucoup de choses à apprendre sur le scripting shell.
Encore merci pour ton aide précieuse.
Je te souhaite une bonne journée
mamiemando
Messages postés
33459
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 janvier 2025
7 813
7 oct. 2021 à 12:20
7 oct. 2021 à 12:20
Merci pour ton retour, bonne découverte du shell et bonne journée :-)