find, xargs, ln et espaces qui me gavent [BASH] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 01-12-2003 à 12:12:02
la solution 0 marche, tu peux aussi utiliser l'option -exec de find
Marsh Posté le 01-12-2003 à 12:34:08
find .. -name "*.pdf" -print0 | xargs -0 
 
ben ça march il me semble. après man find 
 
find -name "*.pdf" -exec ls -l {} \; 
 
par exemple
Marsh Posté le 01-12-2003 à 13:15:03
ok mais comment raccorder mon "ln -s", du genre de
| ln -s "$f" `basename $f` | 
Marsh Posté le 01-12-2003 à 13:26:54
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 
Marsh Posté le 01-12-2003 à 13:30:30
find .. -name "*.pdf" -exec "ln -s {} `basename {}`" \; 
?
Marsh Posté le 01-12-2003 à 13:36:22
find: ln -s ../rep/fichier.pdf ../rep/fichier.pdf: No such file or directory 
 
Marsh Posté le 01-12-2003 à 13:38:50
mouef ... et xargs et les 0 ça marche pas ? 
sinon il te faut faire un vrai script ...
Marsh Posté le 01-12-2003 à 13:46:59
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
Marsh Posté le 01-12-2003 à 13:55:48
mouais mais à tout prob à la con, une sol à la con  
 
 
personne n'aurai la sol à la con dans un petit script de derrière les fagots ? 
Marsh Posté le 01-12-2003 à 14:48:09
bon en fait, je viens de me rendre compte que j'avais pas besoin de passer le basename du fichier en argument de ln  
 
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) 
Marsh Posté le 01-12-2003 à 15:28:46
| 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  
   | 
 
 
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 : 
 | 
 
 
Le problème est ici que ln est appelé plusieurs fois  
 
Marsh Posté le 01-12-2003 à 15:47:51
mais je lis régulièrement les man  
 
c'est juste que ça m'empêche pas de bloquer des fois .. etpuis on est lundi ![[:spamafote] [:spamafote]](https://forum-images.hardware.fr/images/perso/spamafote.gif) petit lundi ... grande semaine
 petit lundi ... grande semaine 
 
haaa ! c'est le "-n 1" qui me manquait  
 
 
merci
Marsh Posté le 01-12-2003 à 12:05:46
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
help ?!