OVH Cloud OVH Cloud

utilisation de find

6 réponses
Avatar
Grand's
Salut,

J'aurai besoin d'un peu d'aide concernant la commande find
Que puis mettre comme action derriere -exec ?
je cherche a controler la presence d'un fichier dans un repertoire
je fais donc :
find . $path -maxdepth 1 -name $f
comme je veut exploiter le resultat, j'ai tester un echo ou mv
jusque la OK
Mais quand j'essaye autre chose, du style donner une valeur a une variable,
ca marche plus

Est-il possible de faire if [ find ...] then ... ??

Merci

Grand's

6 réponses

Avatar
Rakotomandimby
Grand's wrote:

Salut,


Bonjour

Est-il possible de faire if [ find ...] then ... ??


En fait ou est l'interet ?
Find est censé retourner une liste de fichiers , eventuellement un fichier
si on est sur .

if [...] est censé prendre quelquechose de "booléen" .

ce que vous pouvez faire c'est recuperer la sortie d'erreur de "find" et en
faire quelquechose ...

Mais c'est mon avis , et je ne suis pas pro du shell mais j'en ai des
notions ...

Merci

--

http://mrakotom.free.fr

Avatar
ghjghj
Salut,

Justement ce n'est pas la sortie d'erreur que je veux recuperer, mais la
presence du fichier
c'est pourquoi je pensait au IF, genre :
si fichier present dans le rep alors , le renommer et verifier que le
nouveau nom n'est pas present dans ce repertoire
et mettre le tout dans une boucle de controle, mais je n'y arrive pas
Soit c'est pas possible, soit ma syntaxe est mauvaise

Help me please :)

Grand's

"Rakotomandimby" a écrit dans le message news:
bstt49$ovs$
Grand's wrote:

Salut,


Bonjour

Est-il possible de faire if [ find ...] then ... ??


En fait ou est l'interet ?
Find est censé retourner une liste de fichiers , eventuellement un fichier
si on est sur .

if [...] est censé prendre quelquechose de "booléen" .

ce que vous pouvez faire c'est recuperer la sortie d'erreur de "find" et
en

faire quelquechose ...

Mais c'est mon avis , et je ne suis pas pro du shell mais j'en ai des
notions ...

Merci

--

http://mrakotom.free.fr




Avatar
Philippe Delsol
ghjghj a écrit dans le message <3ff27e7c$...
Salut,

Justement ce n'est pas la sortie d'erreur que je veux recuperer, mais la
presence du fichier
c'est pourquoi je pensait au IF, genre :
si fichier present dans le rep alors , le renommer et verifier que le
nouveau nom n'est pas present dans ce repertoire
et mettre le tout dans une boucle de controle, mais je n'y arrive pas
Soit c'est pas possible, soit ma syntaxe est mauvaise


Pourquoi vouloir utiliser find ?
Dans ce cas précis, les tests sur les fichiers suffisent.

Help me please :)

Grand's


Philippe

"Rakotomandimby" a écrit dans le message news:
bstt49$ovs$
Grand's wrote:

Salut,


Bonjour

Est-il possible de faire if [ find ...] then ... ??


En fait ou est l'interet ?
Find est censé retourner une liste de fichiers , eventuellement un
fichier


si on est sur .

if [...] est censé prendre quelquechose de "booléen" .

ce que vous pouvez faire c'est recuperer la sortie d'erreur de "find" et
en

faire quelquechose ...

Mais c'est mon avis , et je ne suis pas pro du shell mais j'en ai des
notions ...

Merci

--

http://mrakotom.free.fr








Avatar
Grand's
Effectivement un test suffit a me dire s'il existe ou pas
Mais je teste si un fichier se trouvant dans le repA est present dans repB
mon script donne a peu pres (pour le test uniquement):

for f in $A do
if [ -f "$repB"] then ;
while [ -f "repB" ] do;
indice = $indice+1
f=$f$indice
done
fi
mv $f /$repA

Mais ca ne marche pas
Kelkun sait pourquoi ???

Grand's

"Philippe Delsol" a écrit dans le message
news: 3ff29470$0$22318$

ghjghj a écrit dans le message <3ff27e7c$...
Salut,

Justement ce n'est pas la sortie d'erreur que je veux recuperer, mais la
presence du fichier
c'est pourquoi je pensait au IF, genre :
si fichier present dans le rep alors , le renommer et verifier que le
nouveau nom n'est pas present dans ce repertoire
et mettre le tout dans une boucle de controle, mais je n'y arrive pas
Soit c'est pas possible, soit ma syntaxe est mauvaise


Pourquoi vouloir utiliser find ?
Dans ce cas précis, les tests sur les fichiers suffisent.

Help me please :)

Grand's


Philippe

"Rakotomandimby" a écrit dans le message news:
bstt49$ovs$
Grand's wrote:

Salut,


Bonjour

Est-il possible de faire if [ find ...] then ... ??


En fait ou est l'interet ?
Find est censé retourner une liste de fichiers , eventuellement un
fichier


si on est sur .

if [...] est censé prendre quelquechose de "booléen" .

ce que vous pouvez faire c'est recuperer la sortie d'erreur de "find"
et



en
faire quelquechose ...

Mais c'est mon avis , et je ne suis pas pro du shell mais j'en ai des
notions ...

Merci

--

http://mrakotom.free.fr











Avatar
David LE BOURGEOIS

Salut,


Salut.

si fichier present dans le rep alors , le renommer et verifier que le
nouveau nom n'est pas present dans ce repertoire
et mettre le tout dans une boucle de controle, mais je n'y arrive pas
Soit c'est pas possible, soit ma syntaxe est mauvaise


~/tmp $ cat _mv
#!/bin/sh

[ "$2" = "" ] && exit 1

source="$1"
destination="$2"
indice=""
[ -d "$destination" ] && destination="$destination/$(basename "$source")"
while [ -e "$destination$indice" ]
do
let indice=indice+1
done
mv "$source" "$destination$indice"

~/tmp $ mkdir a b
~/tmp $ touch ./a/z ./b/z
~/tmp $ find .
.
./_mv
./a
./a/z
./b
./b/z
~/tmp $ ./_mv ./a/z ./b
~/tmp $ find .
.
./_mv
./a
./b
./b/z
./b/z1


--
David LE BOURGEOIS

Avatar
manu
Grand's wrote:

for f in $A do
if [ -f "$repB"] then ;
while [ -f "repB" ] do;
indice = $indice+1
f=$f$indice
done
fi
mv $f /$repA


C'est quel shell, ca?
En /bin/sh, on dit for f in $A; do (attention au point-virgule)
Et aussi indice=`expr $indice + 1` (pas d'espace autour du =, `expr`)

Pour tester quels fichiers du repertoire A sont presents dans B:

for f in $A/* ; do
test -f $B/`basename $i` && echo $f
done

Si tu veux ceux qui ne sont pas présents, tu remplaces && par ||

Si tu veux faire du recursif, c'est un peu plus subtil:
for f in `find $A -type f` ; do
test -f $B/${f#A/} && echo $f
done

On doit pouvoir reduire ca à une ligne avec find -exec mais je n'ai pas
reussi.

Sinon, si tu veux faire des noms de fichiers non existants, essaye la
commande mktemp.

--
Emmanuel Dreyfus
Un bouquin en français sur BSD:
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3