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 12/03/2023, à 16:33

azer2010

[résolu] commande find comportement suspect!

bonjour à tous

voici le problème rencontré avec la commande find.

je voulais faire une recherche sur la racine du système avec un type de fichier spécifique qui est « toto.txt » et pouvoir le déplacer si la recherche du fichier est trouver, avec l'option -exec et la commande mv
répertoire de destination :

 /home/toto/Rep2 

quand je lance la commande find : le fichier est bien trouver dans:

 /home/toto/Rep1 

une action se fait bien (le fichier est enlever de /Rep1) mais n'est pas déplacer dans  « home/toto/Rep2 »

j'ai tester la commande à la fin de son exécution avec

 echo $? 

le retour bien 0, le problème pourait venir d'ou si quelqu'un aurait une réponce!!!!!

voici la syntaxe de la ligne de commande exécutée

find /home/toto/Rep1 -type f -name toto.txt -exec mv {} /home/toto/Rep2 

Merci d'avance de votre lecture et de votre retour.

Libre un Jour Libre Toujours.........

Dernière modification par azer2010 (Le 23/04/2023, à 17:58)

Hors ligne

#2 Le 12/03/2023, à 16:44

Watael

Re : [résolu] commande find comportement suspect!

salut,
Rep2 existe-t-il préalablement ?
parce que s'il n'existe pas, alors le fichier toto.txt a été renommé en Rep2.
pour éviter cela, fait suivre le nom du répertoire de destination d'un slash qui indiquera que la destination est un répertoire.
ainsi, si le répertoire n'existe pas , find émettra une erreur.

le code de retour de find est toujours 0, à moins qu'il y ait une erreur de syntaxe.

$ false #false va simuler un échec
$ echo $?
1
$ find ./ -maxdepth 1 -name lorem -exec false \;
$ echo $? 
0
$

Dernière modification par Watael (Le 12/03/2023, à 16:45)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 12/03/2023, à 17:25

azer2010

Re : [résolu] commande find comportement suspect!

oui le répertoire /Rep2 est déja existant sur le système donc j'ai à nouveau relancer la commande find mais il ne crée pas un nouveau répertoire comme tu l'indique dans ton post (mais il enleve bien le fichier toto.txt de répertoire source « /Rep1 »
la commande que j'ai taper;

 
find /home/toto/Rep1 -type f -name toto.txt -exec mv {} /home/toto/Rep2

j'ai ajouter le slash au chemin du répertoire de destination mais voici l'erreur qui me retourne

 
find /home/toto/Rep1 -type f -name toto.txt -exec mv {} /home/toto/Rep2/
cp: impossible d'accéder à '/home/toto/Rep2/': N'est pas un dossier

!!!! bizarre pour moi, tu en pense quoi

Hors ligne

#4 Le 12/03/2023, à 18:02

Watael

Re : [résolu] commande find comportement suspect!

je me fie à ce que dit le message d'erreur.
qu'affiche :

$ ls -ld /home/toto/Rep2

?

on peut vérifier comme ça :

$ src='/home/toto/Rep1' #je mets dans des variables pour réduire la longueur de la ligne de commande
$ dest='/home/toto/Rep2'
$ test -d "$dest" && { find "$src" -type f -name toto.txt -exec mv {} "$dest" \; ; ls -l "$dest";} || file "$dest"

si le fichier est déplacé (puisqu'il n'est plus sous le répertoire source), où est-il retrouvé par un autre find ?

Dernière modification par Watael (Le 12/03/2023, à 20:53)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 12/03/2023, à 19:32

azer2010

Re : [résolu] commande find comportement suspect!

Watael a écrit :

je me fie à ce que dit le message d'erreur.
...?

voici le retour de la commande ls les permission sont bonne ainsi que l'accés pour utilisateur user1

drwxrwxr-x 2 user1 user1 4096 mars  12 14:18 .

puis pour la deuxième le test retourne une erreur

find: paramètre manquant pour « -exec »
total 4
-rw-rw-r-- 1 toto toto 9 mars  12 17:17 toto.txt

la commande test: si le répertoire /Rep1 existe : si la condition est true la commande find est exécuté
puis la commande ls, ou  si la condition est false la commande file est exécuté ?

j'ai esssayer dans une boucle if...else
l'erreur de la commande find avec l'option -exec me retourne encore une erreur de syntaxe rrrh
un problème en attire un autre :[
vivement que je me fasse gréffé un chaton GPT pour préserver mes neuronnes aux broutilles comme ça :]....sinon Ca va toi help le navire brulleeeeeeeeeeeeeeeee mon watercooling coule....amen

voici ma boucle test sinon

if [ -d $Dest ]; then find "$src" -type f -name toto.txt -exec mv {} "$Dest" && ls -l "$Dest"; else file "$Dest";fi 

si toi tu tape la commande find avec un fichier créer sur ta machine à  /home/$USER/Rep1/toto.txt  puis sera déplacer  vers /home/$USER/Rep2, cela marche t'il???

find /home/$USER/Rep1 -type f -name toto.txt -exec mv {} /home/$USER/Rep2 \;

ou l'erreur est de mon système ?:)  car je comprend pas le Bug de noob.

Dernière modification par azer2010 (Le 12/03/2023, à 19:45)

Hors ligne

#6 Le 12/03/2023, à 21:14

Watael

Re : [résolu] commande find comportement suspect!

le ls montre le détail du répertoire courant, alors que j'ai demandé la vérification de ce qu'est Rep2.

le test teste que Rep2 (encore, et pas Rep1) est un répertoire;
dans la commande find, j'ai oublié le \; : je corrige mon message précédent.

if..else est une structure conditionnelle, qui exécute les commandes une seule fois; ce n'est donc pas une boucle.

dans un test, encore plus qu'ailleurs, il faut toujours mettre la variable entre guillemets, sinon le test teste l'option en tant que chaîne, et retourne toujours vrai.
et toi aussi, tu as oublié le \;

oui, oui, je crée un fichier toto.txt sous Rep1, et "find exec mv" déplace le fichier sous Rep2.
je crée l'environnement

$ mkdir Rep1 Rep2
$ >Rep1/toto.txt

tout fonctionne

$ find "$HOME/Rep1" -type f -name toto.txt -exec mv {} "$HOME/Rep2/" \;
$ ls Rep2
toto.txt
$

je réinitialise

$ mv Rep2/toto.txt Rep1/

je supprime Rep2

$ rmdir Rep2
$ find "$HOME/Rep1" -type f -name toto.txt -exec mv {} "$HOME/Rep2/" \;
mv: impossible de déplacer '/home/watael/Rep1/toto.txt' vers '/home/watael/Rep2/': N'est pas un dossier
$

là, je renomme le fichier

$ find "$HOME/Rep1" -type f -name toto.txt -exec mv {} "$HOME/Rep2" \;
$ ls -l Rep2
-rw-r--r-- 1 watael watael 0 12 mars  21:00 Rep2
$ file Rep2
Rep2: empty
$ 

Rep2 n'est pas un répertoire, c'est un fichier, vide.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne