for i in `find $1` enregistrer les mots avec espaces ?

for i in `find $1` enregistrer les mots avec espaces ? - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 17-09-2004 à 17:08:25    

voila avec mon find je liste tout les fichiers avec leurs chemin à partir de $1.  
 

Code :
  1. [weed@localhost Documents]$ ./droit ./prog
  2. destination avant './prog/'
  3. destination avant './prog/convert'
  4. destination avant './prog/convert_binaire.c'
  5. destination avant './prog/convert_binaire.c~'


 
mais des qu'il y a un espace cela ne fonctionne plus :

Code :
  1. destination avant './prog/corrigé/Exercise
  2. destination avant 1-15.c'
  3. destination avant './prog/corrigé/Exercise
  4. destination avant 5-3.c'


 
j'ai donc rajouté un  -exec echo \'{}\' \;` pour rajouter des simples quotes entre chaque entre chaque mots trouvés. Dans mon cas ca serait chemin+fichier. J'esperais avec les ' que ce soit considéré comme un seul mot avec la boucle for.
 
voila mon script :

Code :
  1. for i in `find $1 -exec echo \'{}\' \;`
  2. do
  3.     echo "destination avant $i"
  4. done


 
 
et voila ce que cela me donne à cause de l'espace malgré les ' ' :

Code :
  1. destination avant './prog/corrigé/Exercise
  2. destination avant 1-15.c'

 
 
alors que j'aimerais avoir ceci :  

Code :
  1. destination avant './prog/corrigé/Exercise 1-15.c'


pour que la variable $i soit exploitable.
 
 
Coment faire pour que ce soit pris en compte ?  
 
PS : ceci n'est qu'un debut de mon script. Je vous explique ce que j'aimerai faire ca peut etre aider.
Lorsque j'ai fais ma sauvegarde de mon système ave tar, j'ai oublié de sauvegardé mes droits. Et donc j'aimerais bien les restaurer. Mon système actuel est bancal mais possède les bonnes permissions. J'aimerais donc copié les permissions de mon système actuel sur ma sauvegarde.  
 
j'aimerais donc que lorsque lance mon script  
[root@localhost Documents]#./droit /home/weed/sauvegarde /
 
ca faffase ceci :
/  ----copie (permission, owner, group) --> /home/weed/sauvegarde


Message édité par weed le 17-09-2004 à 22:34:43
Reply

Marsh Posté le 17-09-2004 à 17:08:25   

Reply

Marsh Posté le 17-09-2004 à 18:27:04    

met des " " autour de ta variable. colle ton script ici ca sera plus clair :)
 
j'ai pas trop compris la fin du post :D

Reply

Marsh Posté le 17-09-2004 à 19:06:53    

oui j'avoue que je n'ai pas été très clair. J'ai reformulé mes explications. J'espere que j'ai été plus compréhensible.  
 
J'ai posté le script.
S'il y a un passage que vous ne comprenez pas trop, n'hesitez pas à me quoter pour que je vous reexplique.


Message édité par weed le 17-09-2004 à 19:10:37
Reply

Marsh Posté le 17-09-2004 à 19:58:04    

essaie deja avec ca : for i in $(find $1 -exec echo "{}" \;)
 
je regarde la reste plus tard
 
edit: je pige pas trop ta boucle.

find . -exec echo destination avant "{}" \;

serait pas plus logique ?


Message édité par Zaib3k le 17-09-2004 à 20:06:55
Reply

Marsh Posté le 17-09-2004 à 22:57:31    

Dans le repertoire /home/alex/Documents/prog/nico/, j'ai entre autre mon srv comme repertoire.

Code :
  1. [weed@localhost Documents]$ls  /home/alex/Documents/prog/nico/
  2. mon srv/


 
et bien quand je fais :  

Code :
  1. [weed@localhost Documents]$ ./guillbis /home/weed/Documents/prog/


 

Code :
  1. ca me sort en autre :
  2. destination avant /home/alex/Documents/prog/nico/Mon
  3. destination avant srv/comservauth.c
  4. destination avant /home/alex/Documents/prog/nico/Mon
  5. destination avant srv/gestserviceauth.c


 
 
avec comme tu dis :  

Code :
  1. for desti in $(find $1 -exec echo "{}" \;)
  2. echo "destination avant $i";
  3. do


 
ce n'est pas malheuresement toujours pas. Le chemin complet n'est pas enregistré mais est coupé en 2.

Reply

Marsh Posté le 17-09-2004 à 23:00:02    

find . -exec echo destination avant "{}" \;
 
ca marche ca. je vois pas l'interet de la boucle

Reply

Marsh Posté le 17-09-2004 à 23:02:03    

Zaib3k a écrit :


edit: je pige pas trop ta boucle.

find . -exec echo destination avant "{}" \;

serait pas plus logique ?


"le destination avant", c'est juste pour tester.  
Je veux juste pour l'instant enregistrer dans une variable $desti enregistrer tout les fichier (et repertoire) avec leurs chemins complets du repertoire $1 que l'on passe en argument.  

Reply

Marsh Posté le 17-09-2004 à 23:03:47    

ok, et tu ne veux pas passer par un fichier intermediaire ?

Reply

Marsh Posté le 17-09-2004 à 23:04:44    

for i in $(find . ); do echo "lalala $i"; done;
 
 
ca marche ca.

Reply

Marsh Posté le 17-09-2004 à 23:05:43    

et sinon
 
find $1 -exec echo "{}" \;
 
equivaut a
find $1
 
:D

Reply

Marsh Posté le 17-09-2004 à 23:05:43   

Reply

Marsh Posté le 17-09-2004 à 23:22:15    

Zaib3k a écrit :

for i in $(find . ); do echo "lalala $i"; done;
 
 
ca marche ca.


non ca marche.  
dans une console créé toi un repertoire avec un espace. Et bien tu verra que ton repertoire ne sera pas sur la meme ligne.  
 
 
 
par contre j'ai trouvé. Il ne faut pas mettre le find directement dans le for.  
 

Code :
  1. t=`find .`
  2. for i in $t, do echo "lalala $t", done;


 
et j'obtiens enfin ca :  

Code :
  1. ./anico/Mon srv/protoservauth.h
  2. ./nico/Mon srv/clientauth
  3. ./nico/Mon srv/servauth
  4. ./nico/Mon srv/users
  5. ./nico/Mon srv/comclientauth.c
  6. ./nico/Mon srv/client
  7. ./nico/Mon srv/a.out
  8. ./nico/Mon srv/serveur


 
 
Tu me demandes pas à quoi sert ma boucle, mais je t'ai dis que c'etait un début de mon programme. Je faire des stats pour relever les permissions, group et owner et je vais les copié sur ma sauvegarde.  
 
le for va me permettre de traiter chaque variable de $desti.

Reply

Marsh Posté le 18-09-2004 à 12:12:23    

ok :o
 
content que ca marche. par contre pour faire une copie des permissions je sens que tu vas en chier. si tu y arrives tu pourrais poster ton script ici ?, ca m'interesse.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed