Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
chciałbym utworzyć kilka dowiązań do plików np "*.txt"
w konsoli piszę:
find . -maxdepth 1 -name "*.txt" -exec ln -s "*.link" {} \;
gdzie robię błąd?
Offline
A może jakiś skrypt? Coś w stylu tego...
#!/bin/sh v1=`ls | grep txt` v2=`ls | grep txt | sed s#.txt#.link#g` ln -s $v1 $v2
Tyle że ten jest dla jednego pliku :/... Podstawowy problem to to że [i]ln[/i] nie pobiera kilku plików tylko jeden... Tak mi się wydaje... Także powyższy skrypt wstawić w pętle, dorobić i masz :) Nigdy się nie poddawaj :D
Ostatnio edytowany przez P@blo (2011-02-27 21:29:42)
Offline
W tym że chciałbyś aby find utworzył nazwę pliku na podstawie części nazwy znalezionego pliku, czego on, AFAIK, nie potrafi.
Wyślij wyjście find do podpowłoki (while read filename).
Offline
tak myślałem, że bez pętli się nie obejdzie, próbowałem tez za pomocą cp- s ale efekt podobny
edit: @Minio dzięki
rozwiązanie jedno linijkowe:
find . -maxdepth 1 -type f -name "*.txt"|while read filename; do ln -s "$filename" "$filename".link; done
lub prościej
ls *txt|while read filename; do ln -s "$filename" "$filename".link; done
lub na for:
#!/bin/bash for file in `ls *txt`; do ln -s "$file" "$file".link done
Ostatnio edytowany przez krzys (2011-02-28 21:07:01)
Offline
[quote=krzys]
#!/bin/bash for file in `ls *txt`; do ln -s "$file" "$file".link done
[/quote]
for file in *.txt; do ln -s "$file" "$file".link #na pewno wolisz mieć file.txt.link zamiast file.link? done
Nie rób [tt]$(ls *txt)[/tt], bo Ci się wykrzaczy na plikach ze spacjami w nazwie.
No i taka konstrukcja jest zamienna tylko dla find -maxdepth 1. Jeśli chodzi o wszystkie pliki w katalogu i podkatalogach, to lepiej find (niby jest **, ale find pewniejszy).
Offline
To były rozważania czysto teoretyczne. Ponieważ zakładam od razu, że szukam "płytko", stąd wniosek, że zamiennie można skorzystać z ls *txt. Faktycznie masz rację, pliki ze spacjami pewnie polegną dlatego, przydały by się jeszcze apostrofy ls '*txt', tego akurat nie sprawdzałem.
Dzięki. Z pozdrowieniami.
Offline
find -maxdepth 1 -type f -name '*.txt' -exec ln -s "{}" "{}.link" \;
Offline
[quote=krzys]przydały by się jeszcze apostrofy ls '*txt', tego akurat nie sprawdzałem.[/quote]
Z pojedynczymi apostrofami będzie szukał plików *txt, a że takich pewnie nie znajdzie, to w ogóle nic nie zrobi.
Jeśli już to
ls *.txt| while read i; do echo --"$i"--; done
Ale po co, skoro można [tt]for i in *.txt[/tt]? Zwłaszcza że while wykonuje się w podpowłoce, co jest wystawianiem się na ewentualne problemy (kiedy chcesz coś robić ze zmiennymi, choćby je inkrementować z każdym kolejnym plikiem).
Ostatnio edytowany przez Minio (2011-03-01 21:18:03)
Offline
Time (s) | Query |
---|---|
0.00010 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00121 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.138.69.39' WHERE u.id=1 |
0.00071 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.138.69.39', 1732278262) |
0.00050 | SELECT * FROM punbb_online WHERE logged<1732277962 |
0.00102 | SELECT topic_id FROM punbb_posts WHERE id=167153 |
0.00174 | SELECT id FROM punbb_posts WHERE topic_id=18449 ORDER BY posted |
0.00059 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=18449 AND t.moved_to IS NULL |
0.00007 | SELECT search_for, replace_with FROM punbb_censoring |
0.00079 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=18449 ORDER BY p.id LIMIT 0,25 |
0.00079 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=18449 |
Total query time: 0.00757 s |