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
Skąd: anywhere
Zarejestrowany: 2008-09-19
Serwis

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


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 |

Offline

 

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

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
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).

Offline

 

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

  krzys - Użytkownik

krzys
Użytkownik
Skąd: anywhere
Zarejestrowany: 2008-09-19
Serwis

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: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: banał związany z dowiązaniem

krzys napisał(-a):

Kod:

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

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 $(ls *txt), 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

 

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

  krzys - Użytkownik

krzys
Użytkownik
Skąd: anywhere
Zarejestrowany: 2008-09-19
Serwis

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: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: banał związany z dowiązaniem

krzys napisał(-a):

przydały by się jeszcze apostrofy ls '*txt', tego akurat nie sprawdzałem.

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 for i in *.txt? 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

 

Stopka forum

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