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/.
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 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)
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
krzys napisał(-a):
Kod:
#!/bin/bash for file in `ls *txt`; do ln -s "$file" "$file".link done
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
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
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
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