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