Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4812 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°558216
weed
Posté le 17-09-2004 à 17:08:25  profilanswer
 

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
mood
Publicité
Posté le 17-09-2004 à 17:08:25  profilanswer
 

n°558274
Zaib3k
Posté le 17-09-2004 à 18:27:04  profilanswer
 

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

n°558291
weed
Posté le 17-09-2004 à 19:06:53  profilanswer
 

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
n°558325
Zaib3k
Posté le 17-09-2004 à 19:58:04  profilanswer
 

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
n°558404
weed
Posté le 17-09-2004 à 22:57:31  profilanswer
 

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.

n°558405
Zaib3k
Posté le 17-09-2004 à 23:00:02  profilanswer
 

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

n°558407
weed
Posté le 17-09-2004 à 23:02:03  profilanswer
 

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.  

n°558408
Zaib3k
Posté le 17-09-2004 à 23:03:47  profilanswer
 

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

n°558409
Zaib3k
Posté le 17-09-2004 à 23:04:44  profilanswer
 

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

n°558410
Zaib3k
Posté le 17-09-2004 à 23:05:43  profilanswer
 

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

mood
Publicité
Posté le 17-09-2004 à 23:05:43  profilanswer
 

n°558412
weed
Posté le 17-09-2004 à 23:22:15  profilanswer
 

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.

n°558516
Zaib3k
Posté le 18-09-2004 à 12:12:23  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
Enregistrer une page web sur disque avec image etc.Enregistrer de nouvelle variable
enlever les espaces avant et après une variablepb de find
Fedora : /usr/bin/ld cannot find -lselinuxxawdecode - enregistrer la TV
Enregistrer une radio streaming en ogg/mp3 - Record_Radio Script v0.2enregistrer depuis l'entrée micro
[Scripts] Commandes find & echo - probleme d'affichage[Résolu] SFTP : Comment rentrer dans un dossier avec un nom à espaces
Plus de sujets relatifs à : for i in `find $1` enregistrer les mots avec espaces ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)