#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!
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