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

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [BASH] find, xargs, ln et espaces qui me gavent

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[BASH] find, xargs, ln et espaces qui me gavent

n°368004
bobuse
Posté le 01-12-2003 à 12:05:46  profilanswer
 

bon là je sèche :(
 
mon probleme :
faire un script qui droppe dans le rep courant des liens symboliques vers tous les *.pdf situés dans le repertoire du dessus et ses sous-rep.
 
en gros, j'ai mon find :  

find .. -name "*.pdf"


 
et pour tous ces fichiers faire un lien symbolique.
 
j'avais pensé à un truc du genre :

for f in `find .. -name "*.pdf" -print0 ; do
    ln -s "$f" `basename $f`
done


 
mais bon le probleme, c'est les espaces :/
J'ai pensé à quelques bout de code pour arranger les choses :

find .. -name "*.pdf" -print0 | xargs -0


ou

find .. -name "*.pdf" | awk -F '\n' '{ print "\""$1"\""}'


 
mais j'y arrive toujours pas  :sweat:  
 
help ?!

mood
Publicité
Posté le 01-12-2003 à 12:05:46  profilanswer
 

n°368011
Taz
bisounours-codeur
Posté le 01-12-2003 à 12:12:02  profilanswer
 

la solution 0 marche, tu peux aussi utiliser l'option -exec de find

n°368019
bobuse
Posté le 01-12-2003 à 12:16:44  profilanswer
 

tu peux developper stp ? :)

n°368042
Taz
bisounours-codeur
Posté le 01-12-2003 à 12:34:08  profilanswer
 

find .. -name "*.pdf" -print0 | xargs -0
 
ben ça march il me semble. après man find
 
find -name "*.pdf" -exec ls -l {} \;
 
par exemple

n°368068
bobuse
Posté le 01-12-2003 à 13:15:03  profilanswer
 

ok mais comment raccorder mon "ln -s", du genre de

ln -s "$f" `basename $f`

n°368073
Taz
bisounours-codeur
Posté le 01-12-2003 à 13:18:13  profilanswer
 

ç marche pas
-exec ln -s {} `basename {}` \; ?

n°368081
bobuse
Posté le 01-12-2003 à 13:26:54  profilanswer
 

find .. -name "*.pdf" -exec ln -s {} `basename {}` \;
 
ben ça me sort :
ln: `../rep/fichier.pdf': fichier existant.
 
ça laisse présager, que le basename marche pas top :/

n°368084
Taz
bisounours-codeur
Posté le 01-12-2003 à 13:30:30  profilanswer
 

find .. -name "*.pdf" -exec "ln -s {} `basename {}`" \;
?

n°368085
bobuse
Posté le 01-12-2003 à 13:36:22  profilanswer
 

find: ln -s ../rep/fichier.pdf ../rep/fichier.pdf: No such file or directory
 
:(


Message édité par bobuse le 01-12-2003 à 13:36:33
n°368087
Taz
bisounours-codeur
Posté le 01-12-2003 à 13:38:50  profilanswer
 

mouef ... et xargs et les 0 ça marche pas ?
sinon il te faut faire un vrai script ...


Message édité par Taz le 01-12-2003 à 13:39:27
mood
Publicité
Posté le 01-12-2003 à 13:38:50  profilanswer
 

n°368089
bobuse
Posté le 01-12-2003 à 13:43:09  profilanswer
 

mouairf :/
 
merci de ton aide en tout cas :)

n°368092
Taz
bisounours-codeur
Posté le 01-12-2003 à 13:46:59  profilanswer
 

c'est un problème à la con que tout lemonde a en sh. si t'as 2/3 connaissance en perl/python, ça se fait facilement

n°368097
bobuse
Posté le 01-12-2003 à 13:55:48  profilanswer
 

mouais mais à tout prob à la con, une sol à la con :D
 
personne n'aurai la sol à la con dans un petit script de derrière les fagots ? :)

n°368132
bobuse
Posté le 01-12-2003 à 14:48:09  profilanswer
 

bon en fait, je viens de me rendre compte que j'avais pas besoin de passer le basename du fichier en argument de ln :D
par défaut, ln -s chemin/fichier crée un lien dans le rep courant portant le meme nom que le fichier ...
 
ça donne :  

find ".." -name "*.pdf" | awk -F '\n' '{ system("ln -s \""$1"\"" ) }'


(solution possible)

n°368140
arsunik
ma tuxitude me beastifie
Posté le 01-12-2003 à 15:28:46  profilanswer
 

bobuse a écrit :

bon en fait, je viens de me rendre compte que j'avais pas besoin de passer le basename du fichier en argument de ln :D
par défaut, ln -s chemin/fichier crée un lien dans le rep courant portant le meme nom que le fichier ...
 
ça donne :  

find ".." -name "*.pdf" | awk -F '\n' '{ system("ln -s \""$1"\"" ) }'


(solution possible)
 


 
Rhaa quelle horreur !!!
Tu te rends compte que tout le temps que tu as passé à chercher une solution, tu aurais pu lire un livre sur bash/shell.
Ou rien qu'un site si tu n'aimes pas les livres.
Ça te permettrait de prendre de bonnes habitudes pour tes scripts.
Là ton script plante dès qu'un nom de fichier contient un espace, un guillemet ou un saut de ligne.
 
Une solution :

Code :
  1. find . -print0 | xargs -0 -n 1 ln -s


 
Le problème est ici que ln est appelé plusieurs fois :/

n°368147
bobuse
Posté le 01-12-2003 à 15:47:51  profilanswer
 

mais je lis régulièrement les man :o
c'est juste que ça m'empêche pas de bloquer des fois .. etpuis on est lundi [:spamafote] petit lundi ... grande semaine
 
haaa ! c'est le "-n 1" qui me manquait :D
 
merci


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

  [BASH] find, xargs, ln et espaces qui me gavent

 

Sujets relatifs
[bash] prob a la conaide correction script bash
[ Shell/Bash ] Quelques commandes pour lancer une appli[UNIX] question de find
[mdke] erreur bizarre avec bash[bash] erreur dans un script...
[bash] Regexp pour matcher un code postal ?Problème au boot de Mandrake 9.1 : "Find module dependencies..."
tabulation émulées avec des espaces <-> tabulation duresnb argument script bash
Plus de sujets relatifs à : [BASH] find, xargs, ln et espaces qui me gavent


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR