Witam
Mam w podany folder np. "/home/user". W tym folderze są pliki
(w różnych podfolderach, niektóre kilka podfolderów głębiej).
np.
/home/user/a/x.txt
/home/user/a/b/c/y.txt
Plików może być dużo i w różnych podfolderach, a więc skrypt powinien działać rekurencyjnie.
Potrzebuję skrypt który stworzy linki do tych plików w
innym podanym folderze np. "/home/test/links" tak aby
struktura katalogów została zachowana, a do każdego pliku pojawił się link:
/home/test/links/a/@x.txt
/home/test/links/a/b/c/@y.txt
gdzie @x.txt to link do pliku "/home/user/a/x.txt"
itp.
Jak się do tego zabrać?
[+] skrypt bash - stworzenie drzewa linków do drzewa plików
[+] skrypt bash - stworzenie drzewa linków do drzewa plików
Ostatnio zmieniony 16 sierpnia 2017, 17:15 przez aksnet, łącznie zmieniany 2 razy.
- LordRuthwen
- Moderator
- Posty: 2341
- Rejestracja: 18 września 2009, 21:45
- Lokalizacja: klikash?
Re: skrypt bash - stworzenie drzewa linków do drzewa plików
Najpierw odtwórz drzewo katalogów a potem dla każdego pliku stwórz link - wszystko zrobisz za pomocą find
Re: skrypt bash - stworzenie drzewa linków do drzewa plików
Stworzyłem coś takiego:
linki są tworzone tam gdzie trzeba, ale nie wskazują jeszcze na to co trzeba
przed $LINKSDIR/$FILE potrzebuję wstawić " ../" tyle razy jaka jest głębokość folderu $FILE
(żeby się z niego wycofać) a następnie przejść do $LINKSDIR/$FILE
Może są jakieś prostsze metody?
PS.
Jak policzyć ile razy występuje znak "/" w stringu?
Kod: Zaznacz cały
#!/bin/bash
$LINKSDIR="/home/user"
cd $LINKSDIR
files=`find -type f`
for file in $files
do
FILE=${file:2} # usuwamy ze sciezki 2 poczatkowe znaki "./"
ln -s $LINKSDIR/$FILE ../../$FILE
done
przed $LINKSDIR/$FILE potrzebuję wstawić " ../" tyle razy jaka jest głębokość folderu $FILE
(żeby się z niego wycofać) a następnie przejść do $LINKSDIR/$FILE
Może są jakieś prostsze metody?
PS.
Jak policzyć ile razy występuje znak "/" w stringu?
- LordRuthwen
- Moderator
- Posty: 2341
- Rejestracja: 18 września 2009, 21:45
- Lokalizacja: klikash?
Re: skrypt bash - stworzenie drzewa linków do drzewa plików
Masz przykład:
Kod: Zaznacz cały
#mam katalogi debian i debian2
# w katalogu debian tworzę drzewo katalogów 0/1/2/3/4/5/6/7/8/9, w każdym z nich znajdują się pliki a b c d e f g h i j k;
for i in 0 1 2 3 4 5 6 7 8 9; do mkdir $i; cd $i; for j in a b c d e f g h i j k; do touch $j; done; done
#odwzorowuję drzewo katalogów z nadrzędnego debian do debian2:
cd debian
find . -type d -exec mkdir -p ../debian2/{} \;
#tworzę linki symboliczne dla każdego pliku do katalogu w debian2:
find . -type f -exec ln -s {} ../debian2/{} \;
#efekt:
debian $ ls -alR ../debian2/
../debian2/:
razem 12
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 12:57 .
drwxr-xr-x 37 lukasz lukasz 4096 sie 14 12:55 ..
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 0
../debian2/0:
razem 12
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 .
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 12:57 ..
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 1
lrwxrwxrwx 1 lukasz lukasz 5 sie 14 13:00 a -> ./0/a
lrwxrwxrwx 1 lukasz lukasz 5 sie 14 13:00 b -> ./0/b
lrwxrwxrwx 1 lukasz lukasz 5 sie 14 13:00 c -> ./0/c
lrwxrwxrwx 1 lukasz lukasz 5 sie 14 13:00 d -> ./0/d
lrwxrwxrwx 1 lukasz lukasz 5 sie 14 13:00 e -> ./0/e
lrwxrwxrwx 1 lukasz lukasz 5 sie 14 13:00 f -> ./0/f
lrwxrwxrwx 1 lukasz lukasz 5 sie 14 13:00 g -> ./0/g
lrwxrwxrwx 1 lukasz lukasz 5 sie 14 13:00 h -> ./0/h
lrwxrwxrwx 1 lukasz lukasz 5 sie 14 13:00 i -> ./0/i
lrwxrwxrwx 1 lukasz lukasz 5 sie 14 13:00 j -> ./0/j
lrwxrwxrwx 1 lukasz lukasz 5 sie 14 13:00 k -> ./0/k
../debian2/0/1:
razem 12
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 .
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 ..
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 2
lrwxrwxrwx 1 lukasz lukasz 7 sie 14 13:00 a -> ./0/1/a
lrwxrwxrwx 1 lukasz lukasz 7 sie 14 13:00 b -> ./0/1/b
lrwxrwxrwx 1 lukasz lukasz 7 sie 14 13:00 c -> ./0/1/c
lrwxrwxrwx 1 lukasz lukasz 7 sie 14 13:00 d -> ./0/1/d
lrwxrwxrwx 1 lukasz lukasz 7 sie 14 13:00 e -> ./0/1/e
lrwxrwxrwx 1 lukasz lukasz 7 sie 14 13:00 f -> ./0/1/f
lrwxrwxrwx 1 lukasz lukasz 7 sie 14 13:00 g -> ./0/1/g
lrwxrwxrwx 1 lukasz lukasz 7 sie 14 13:00 h -> ./0/1/h
lrwxrwxrwx 1 lukasz lukasz 7 sie 14 13:00 i -> ./0/1/i
lrwxrwxrwx 1 lukasz lukasz 7 sie 14 13:00 j -> ./0/1/j
lrwxrwxrwx 1 lukasz lukasz 7 sie 14 13:00 k -> ./0/1/k
../debian2/0/1/2:
razem 12
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 .
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 ..
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 3
lrwxrwxrwx 1 lukasz lukasz 9 sie 14 13:00 a -> ./0/1/2/a
lrwxrwxrwx 1 lukasz lukasz 9 sie 14 13:00 b -> ./0/1/2/b
lrwxrwxrwx 1 lukasz lukasz 9 sie 14 13:00 c -> ./0/1/2/c
lrwxrwxrwx 1 lukasz lukasz 9 sie 14 13:00 d -> ./0/1/2/d
lrwxrwxrwx 1 lukasz lukasz 9 sie 14 13:00 e -> ./0/1/2/e
lrwxrwxrwx 1 lukasz lukasz 9 sie 14 13:00 f -> ./0/1/2/f
lrwxrwxrwx 1 lukasz lukasz 9 sie 14 13:00 g -> ./0/1/2/g
lrwxrwxrwx 1 lukasz lukasz 9 sie 14 13:00 h -> ./0/1/2/h
lrwxrwxrwx 1 lukasz lukasz 9 sie 14 13:00 i -> ./0/1/2/i
lrwxrwxrwx 1 lukasz lukasz 9 sie 14 13:00 j -> ./0/1/2/j
lrwxrwxrwx 1 lukasz lukasz 9 sie 14 13:00 k -> ./0/1/2/k
../debian2/0/1/2/3:
razem 12
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 .
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 ..
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 4
lrwxrwxrwx 1 lukasz lukasz 11 sie 14 13:00 a -> ./0/1/2/3/a
lrwxrwxrwx 1 lukasz lukasz 11 sie 14 13:00 b -> ./0/1/2/3/b
lrwxrwxrwx 1 lukasz lukasz 11 sie 14 13:00 c -> ./0/1/2/3/c
lrwxrwxrwx 1 lukasz lukasz 11 sie 14 13:00 d -> ./0/1/2/3/d
lrwxrwxrwx 1 lukasz lukasz 11 sie 14 13:00 e -> ./0/1/2/3/e
lrwxrwxrwx 1 lukasz lukasz 11 sie 14 13:00 f -> ./0/1/2/3/f
lrwxrwxrwx 1 lukasz lukasz 11 sie 14 13:00 g -> ./0/1/2/3/g
lrwxrwxrwx 1 lukasz lukasz 11 sie 14 13:00 h -> ./0/1/2/3/h
lrwxrwxrwx 1 lukasz lukasz 11 sie 14 13:00 i -> ./0/1/2/3/i
lrwxrwxrwx 1 lukasz lukasz 11 sie 14 13:00 j -> ./0/1/2/3/j
lrwxrwxrwx 1 lukasz lukasz 11 sie 14 13:00 k -> ./0/1/2/3/k
../debian2/0/1/2/3/4:
razem 12
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 .
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 ..
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 5
lrwxrwxrwx 1 lukasz lukasz 13 sie 14 13:00 a -> ./0/1/2/3/4/a
lrwxrwxrwx 1 lukasz lukasz 13 sie 14 13:00 b -> ./0/1/2/3/4/b
lrwxrwxrwx 1 lukasz lukasz 13 sie 14 13:00 c -> ./0/1/2/3/4/c
lrwxrwxrwx 1 lukasz lukasz 13 sie 14 13:00 d -> ./0/1/2/3/4/d
lrwxrwxrwx 1 lukasz lukasz 13 sie 14 13:00 e -> ./0/1/2/3/4/e
lrwxrwxrwx 1 lukasz lukasz 13 sie 14 13:00 f -> ./0/1/2/3/4/f
lrwxrwxrwx 1 lukasz lukasz 13 sie 14 13:00 g -> ./0/1/2/3/4/g
lrwxrwxrwx 1 lukasz lukasz 13 sie 14 13:00 h -> ./0/1/2/3/4/h
lrwxrwxrwx 1 lukasz lukasz 13 sie 14 13:00 i -> ./0/1/2/3/4/i
lrwxrwxrwx 1 lukasz lukasz 13 sie 14 13:00 j -> ./0/1/2/3/4/j
lrwxrwxrwx 1 lukasz lukasz 13 sie 14 13:00 k -> ./0/1/2/3/4/k
../debian2/0/1/2/3/4/5:
razem 12
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 .
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 ..
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 6
lrwxrwxrwx 1 lukasz lukasz 15 sie 14 13:00 a -> ./0/1/2/3/4/5/a
lrwxrwxrwx 1 lukasz lukasz 15 sie 14 13:00 b -> ./0/1/2/3/4/5/b
lrwxrwxrwx 1 lukasz lukasz 15 sie 14 13:00 c -> ./0/1/2/3/4/5/c
lrwxrwxrwx 1 lukasz lukasz 15 sie 14 13:00 d -> ./0/1/2/3/4/5/d
lrwxrwxrwx 1 lukasz lukasz 15 sie 14 13:00 e -> ./0/1/2/3/4/5/e
lrwxrwxrwx 1 lukasz lukasz 15 sie 14 13:00 f -> ./0/1/2/3/4/5/f
lrwxrwxrwx 1 lukasz lukasz 15 sie 14 13:00 g -> ./0/1/2/3/4/5/g
lrwxrwxrwx 1 lukasz lukasz 15 sie 14 13:00 h -> ./0/1/2/3/4/5/h
lrwxrwxrwx 1 lukasz lukasz 15 sie 14 13:00 i -> ./0/1/2/3/4/5/i
lrwxrwxrwx 1 lukasz lukasz 15 sie 14 13:00 j -> ./0/1/2/3/4/5/j
lrwxrwxrwx 1 lukasz lukasz 15 sie 14 13:00 k -> ./0/1/2/3/4/5/k
../debian2/0/1/2/3/4/5/6:
razem 12
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 .
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 ..
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 7
lrwxrwxrwx 1 lukasz lukasz 17 sie 14 13:00 a -> ./0/1/2/3/4/5/6/a
lrwxrwxrwx 1 lukasz lukasz 17 sie 14 13:00 b -> ./0/1/2/3/4/5/6/b
lrwxrwxrwx 1 lukasz lukasz 17 sie 14 13:00 c -> ./0/1/2/3/4/5/6/c
lrwxrwxrwx 1 lukasz lukasz 17 sie 14 13:00 d -> ./0/1/2/3/4/5/6/d
lrwxrwxrwx 1 lukasz lukasz 17 sie 14 13:00 e -> ./0/1/2/3/4/5/6/e
lrwxrwxrwx 1 lukasz lukasz 17 sie 14 13:00 f -> ./0/1/2/3/4/5/6/f
lrwxrwxrwx 1 lukasz lukasz 17 sie 14 13:00 g -> ./0/1/2/3/4/5/6/g
lrwxrwxrwx 1 lukasz lukasz 17 sie 14 13:00 h -> ./0/1/2/3/4/5/6/h
lrwxrwxrwx 1 lukasz lukasz 17 sie 14 13:00 i -> ./0/1/2/3/4/5/6/i
lrwxrwxrwx 1 lukasz lukasz 17 sie 14 13:00 j -> ./0/1/2/3/4/5/6/j
lrwxrwxrwx 1 lukasz lukasz 17 sie 14 13:00 k -> ./0/1/2/3/4/5/6/k
../debian2/0/1/2/3/4/5/6/7:
razem 12
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 .
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 ..
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 8
lrwxrwxrwx 1 lukasz lukasz 19 sie 14 13:00 a -> ./0/1/2/3/4/5/6/7/a
lrwxrwxrwx 1 lukasz lukasz 19 sie 14 13:00 b -> ./0/1/2/3/4/5/6/7/b
lrwxrwxrwx 1 lukasz lukasz 19 sie 14 13:00 c -> ./0/1/2/3/4/5/6/7/c
lrwxrwxrwx 1 lukasz lukasz 19 sie 14 13:00 d -> ./0/1/2/3/4/5/6/7/d
lrwxrwxrwx 1 lukasz lukasz 19 sie 14 13:00 e -> ./0/1/2/3/4/5/6/7/e
lrwxrwxrwx 1 lukasz lukasz 19 sie 14 13:00 f -> ./0/1/2/3/4/5/6/7/f
lrwxrwxrwx 1 lukasz lukasz 19 sie 14 13:00 g -> ./0/1/2/3/4/5/6/7/g
lrwxrwxrwx 1 lukasz lukasz 19 sie 14 13:00 h -> ./0/1/2/3/4/5/6/7/h
lrwxrwxrwx 1 lukasz lukasz 19 sie 14 13:00 i -> ./0/1/2/3/4/5/6/7/i
lrwxrwxrwx 1 lukasz lukasz 19 sie 14 13:00 j -> ./0/1/2/3/4/5/6/7/j
lrwxrwxrwx 1 lukasz lukasz 19 sie 14 13:00 k -> ./0/1/2/3/4/5/6/7/k
../debian2/0/1/2/3/4/5/6/7/8:
razem 12
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 .
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 ..
drwxrwxr-x 2 lukasz lukasz 4096 sie 14 13:00 9
lrwxrwxrwx 1 lukasz lukasz 21 sie 14 13:00 a -> ./0/1/2/3/4/5/6/7/8/a
lrwxrwxrwx 1 lukasz lukasz 21 sie 14 13:00 b -> ./0/1/2/3/4/5/6/7/8/b
lrwxrwxrwx 1 lukasz lukasz 21 sie 14 13:00 c -> ./0/1/2/3/4/5/6/7/8/c
lrwxrwxrwx 1 lukasz lukasz 21 sie 14 13:00 d -> ./0/1/2/3/4/5/6/7/8/d
lrwxrwxrwx 1 lukasz lukasz 21 sie 14 13:00 e -> ./0/1/2/3/4/5/6/7/8/e
lrwxrwxrwx 1 lukasz lukasz 21 sie 14 13:00 f -> ./0/1/2/3/4/5/6/7/8/f
lrwxrwxrwx 1 lukasz lukasz 21 sie 14 13:00 g -> ./0/1/2/3/4/5/6/7/8/g
lrwxrwxrwx 1 lukasz lukasz 21 sie 14 13:00 h -> ./0/1/2/3/4/5/6/7/8/h
lrwxrwxrwx 1 lukasz lukasz 21 sie 14 13:00 i -> ./0/1/2/3/4/5/6/7/8/i
lrwxrwxrwx 1 lukasz lukasz 21 sie 14 13:00 j -> ./0/1/2/3/4/5/6/7/8/j
lrwxrwxrwx 1 lukasz lukasz 21 sie 14 13:00 k -> ./0/1/2/3/4/5/6/7/8/k
../debian2/0/1/2/3/4/5/6/7/8/9:
razem 8
drwxrwxr-x 2 lukasz lukasz 4096 sie 14 13:00 .
drwxrwxr-x 3 lukasz lukasz 4096 sie 14 13:00 ..
lrwxrwxrwx 1 lukasz lukasz 23 sie 14 13:00 a -> ./0/1/2/3/4/5/6/7/8/9/a
lrwxrwxrwx 1 lukasz lukasz 23 sie 14 13:00 b -> ./0/1/2/3/4/5/6/7/8/9/b
lrwxrwxrwx 1 lukasz lukasz 23 sie 14 13:00 c -> ./0/1/2/3/4/5/6/7/8/9/c
lrwxrwxrwx 1 lukasz lukasz 23 sie 14 13:00 d -> ./0/1/2/3/4/5/6/7/8/9/d
lrwxrwxrwx 1 lukasz lukasz 23 sie 14 13:00 e -> ./0/1/2/3/4/5/6/7/8/9/e
lrwxrwxrwx 1 lukasz lukasz 23 sie 14 13:00 f -> ./0/1/2/3/4/5/6/7/8/9/f
lrwxrwxrwx 1 lukasz lukasz 23 sie 14 13:00 g -> ./0/1/2/3/4/5/6/7/8/9/g
lrwxrwxrwx 1 lukasz lukasz 23 sie 14 13:00 h -> ./0/1/2/3/4/5/6/7/8/9/h
lrwxrwxrwx 1 lukasz lukasz 23 sie 14 13:00 i -> ./0/1/2/3/4/5/6/7/8/9/i
lrwxrwxrwx 1 lukasz lukasz 23 sie 14 13:00 j -> ./0/1/2/3/4/5/6/7/8/9/j
lrwxrwxrwx 1 lukasz lukasz 23 sie 14 13:00 k -> ./0/1/2/3/4/5/6/7/8/9/k
Re: skrypt bash - stworzenie drzewa linków do drzewa plików
LordRuthwen, bardzo fajne rozwiązanie, ale zamiast:
zastsować:
Zostaną uwzględnione nie tylko pliki, ale dowiązania, urządzenia i gniazda.
Kod: Zaznacz cały
find . -type f -exec ln -s {} ../debian2/{} \;
Kod: Zaznacz cały
find . ! -type d -exec ln -s {} ../debian2/{} \;
- LordRuthwen
- Moderator
- Posty: 2341
- Rejestracja: 18 września 2009, 21:45
- Lokalizacja: klikash?
Re: skrypt bash - stworzenie drzewa linków do drzewa plików
Tyz prawda 
Jednak chciał tylko dla plików
@aksnet: jeśli to rozwiązuje temat to oznacz go jako rozwiązany zgodnie z regulaminem forum

Jednak chciał tylko dla plików

@aksnet: jeśli to rozwiązuje temat to oznacz go jako rozwiązany zgodnie z regulaminem forum