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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2011-02-27 20:15:59

  krzys - Użytkownik

krzys
Użytkownik
Zarejestrowany: 2008-09-19

banał związany z dowiązaniem

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

 

#2  2011-02-27 21:25:01

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: banał związany z dowiązaniem

A może jakiś skrypt? Coś w stylu tego...

Kod:

#!/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)


[tt]ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |[/tt]

Offline

 

#3  2011-02-27 21:51:50

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Brno, Česko
Zarejestrowany: 2007-12-22
Serwis

Re: banał związany z dowiązaniem

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).


Spinnen Essen: [url=http://fluxboxpl.org/portal/]FluxboxPL[/url] [url=http://przepis-na-lo.pl/]Przepis na LibreOffice[/url]

Offline

 

#4  2011-02-28 06:01:53

  krzys - Użytkownik

krzys
Użytkownik
Zarejestrowany: 2008-09-19

Re: banał związany z dowiązaniem

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:

Kod:

find . -maxdepth 1 -type f -name "*.txt"|while read filename; do ln -s "$filename" "$filename".link; done

lub prościej

Kod:

ls *txt|while read filename; do ln -s "$filename" "$filename".link; done

lub na for:

Kod:

#!/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

 

#5  2011-02-28 22:12:30

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Brno, Česko
Zarejestrowany: 2007-12-22
Serwis

Re: banał związany z dowiązaniem

[quote=krzys]

Kod:

#!/bin/bash
for file in `ls *txt`; do
ln -s "$file" "$file".link
done

[/quote]

Kod:

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).


Spinnen Essen: [url=http://fluxboxpl.org/portal/]FluxboxPL[/url] [url=http://przepis-na-lo.pl/]Przepis na LibreOffice[/url]

Offline

 

#6  2011-03-01 07:54:03

  krzys - Użytkownik

krzys
Użytkownik
Zarejestrowany: 2008-09-19

Re: banał związany z dowiązaniem

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

 

#7  2011-03-01 09:14:59

  lessmian - Użytkownik

lessmian
Użytkownik
Skąd: Kraków
Zarejestrowany: 2009-09-25

Re: banał związany z dowiązaniem

Kod:

find -maxdepth 1 -type f -name '*.txt' -exec ln -s "{}" "{}.link" \;

Offline

 

#8  2011-03-01 21:17:44

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Brno, Česko
Zarejestrowany: 2007-12-22
Serwis

Re: banał związany z dowiązaniem

[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

Kod:

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)


Spinnen Essen: [url=http://fluxboxpl.org/portal/]FluxboxPL[/url] [url=http://przepis-na-lo.pl/]Przepis na LibreOffice[/url]

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.011 seconds, 10 queries executed ]

Informacje debugowania

Time (s) Query
0.00012 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00134 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.145.166.167' WHERE u.id=1
0.00092 UPDATE punbb_online SET logged=1716161889 WHERE ident='3.145.166.167'
0.00043 SELECT * FROM punbb_online WHERE logged<1716161589
0.00220 DELETE FROM punbb_online WHERE ident='54.36.149.37'
0.00036 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.00026 SELECT search_for, replace_with FROM punbb_censoring
0.00166 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.00097 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=18449
Total query time: 0.0083 s