• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Bash tworzenie skryptów Linux

Ultraszybki serwer VPS NVMe BIZNES
0 głosów
123 wizyt
pytanie zadane 14 listopada 2017 w Systemy operacyjne, programy przez pjeter Nowicjusz (120 p.)
Witam, mam do napisania skrypt służący do wyszukiwania w podanych katalogach wszystkich dowiązań twardych do podanego pliku w formacie: skrypt  plik katalog1 katalog2  ... Próbowałem kombinować z poleceniem find, ale nic mi nie wychodzi(dopiero zaczynam z linuxem). Nawet nie wiem szczerze mówiąc jak to zapisać i nie chodzi mi o to by ktoś to za mnie napisał. Potrzebuję wskazówek jak zacząć i jakich komend użyć. Z góry dzięki za podpowiedzi i pozdrawiam.
komentarz 14 listopada 2017 przez shead VIP (145,900 p.)

Próbowałem kombinować z poleceniem find

Pokaż co próbowałeś zrobić i w jaki sposób.

Jak dobrze rozumiem, to skrypt ma się uruchamiać przez podanie mu miejsca rozpoczęcia wyszukiwania oraz pliku na który ma wskazywać hardlink? Btw tak, musisz użyć find

komentarz 14 listopada 2017 przez pjeter Nowicjusz (120 p.)
edycja 14 listopada 2017 przez pjeter
Dzięki za podpowiedź, chodzi o to, że ja w ogóle nie wiem jak się za to zabrać.

#!/bin/bash
if [find -samefile plik katalog1 katalog2]
then
    echo ls -i #skrypt wypisuje na stdout numer i-węzła podanego pliku(chyba) jeśli znalazł plik z dowiązaniem twardym, następnie przegląda kolejno podane katalogi i poszukuje innych dowiązań twardych do podanego pliku.
    echo #i tu wypisuje na stdout pełną nazwę ścieżki
fi

Po prostu potrzebuję pomocy krok po kroku... Dzięki za podpowiedzi.
komentarz 14 listopada 2017 przez shead VIP (145,900 p.)

Na przyszłość wrzucaj kod w specjalny bloczek:

#!/bin/bash
if [find -samefile plik katalog1 katalog2]
then
    echo ls -i #skrypt wypisuje na stdout numer i-węzła podanego pliku(chyba) jeśli znalazł plik z dowiązaniem twardym, następnie przegląda kolejno podane katalogi i poszukuje innych dowiązań twardych do podanego pliku.
    echo #i tu wypisuje na stdout pełną nazwę ścieżki
fi

 

1 odpowiedź

0 głosów
odpowiedź 14 listopada 2017 przez shead VIP (145,900 p.)
Wskazówka: przyjrzyj się parametrowi -samefile w find
komentarz 14 listopada 2017 przez shead VIP (145,900 p.)

Wskazówek ciąg dalszy:

Używasz find, kluczem są odpowiednie parametry, a więc:

  • -samefile do sprawdzenia czy pliki są identyczne (a takie będą jeżeli to hardlink)
  • raczej nie potrzebujesz if'ów, find powinien wystarczyć ;)
komentarz 14 listopada 2017 przez shead VIP (145,900 p.)

Załóżmy takie środowisko:

├── original_file
└── path
    └── to
        ├── another
        │   └── hard
        │       └── link
        │           └── myanotherhardlink
        └── hard
            └── link
                └── myhardlink

Gdzie "original_file" to plik stworzony pierwotnie, "myhardlink", "myanotherhardlink" to hard linki.

Spróbuj pobawić się z find i -samefile na tym środowisku. Tyle wystarczy aby zrobić to zadanie ;) 

komentarz 15 listopada 2017 przez pjeter Nowicjusz (120 p.)

Dzięki właśnie o to mi chodziło, kombinuję ze składnią, ale nie chce działać, albo nie wypisuje całej ścieżki dostępu.

#!/bin/bash
find ./$2 -samefile $1 -print 

 

komentarz 15 listopada 2017 przez shead VIP (145,900 p.)
Nie potrzebujesz -print, tyle powinno wystarczyć
komentarz 15 listopada 2017 przez pjeter Nowicjusz (120 p.)
Jak odpalam skrypt to nic nie wyświetla tylko przechodzi do następnej linijki jakby nic się nie stało. W projekcie muszę wyświetlić wszystkie znalezione nazwy  na stdout z pełną nazwą ścieżki dostępu.

Wielkie dzięki za zainteresowanie.
komentarz 18 listopada 2017 przez pjeter Nowicjusz (120 p.)

Takie coś utworzyłem:

#!/bin/bash
if [ -e ./$1 ]; then echo "Nr i-węzła pliku $1 to `ls -i $1`"
else echo "Nie ma takiego pliku, postać wywołania skryptu: skrypt plik katalog1 katalog2"
fi
for (( i=1; i <= 3; i++ )); do
    if [ ! -e ./$i ]; then echo "Plik $i nie isnieje" 
    elif [ ! -r ./$i ]; then echo "Nie masz uprawnień do czytania pliku $i " 
    elif [ ! -w ./$i ]; then echo "Nie masz uprawnień do edycji pliku $i" 
    elif [ ! -x ./$i ]; then echo "Nie masz uprawnień do wykonywania pliku $i" 
    fi    
done
find ./$2 -samefile $1 
find ./$3 -samefile $1

Mógłbyś na to zerknąć czy jest to poprawne?

Z góry dzięki.

komentarz 18 listopada 2017 przez shead VIP (145,900 p.)
Jak dla mnie to templatka na find'a więc raczej wciąż zostaje to poprawne ;0
komentarz 18 listopada 2017 przez pjeter Nowicjusz (120 p.)
Dzięki więc tak  to wyślę do oceny.

Podobne pytania

0 głosów
0 odpowiedzi 112 wizyt
pytanie zadane 21 grudnia 2017 w Systemy operacyjne, programy przez szuaknie Początkujący (300 p.)
0 głosów
0 odpowiedzi 47 wizyt
pytanie zadane 14 listopada 2017 w Systemy operacyjne, programy przez damianoom Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 96 wizyt
pytanie zadane 9 czerwca 2017 w Systemy operacyjne, programy przez nalq Nowicjusz (120 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.
Ciekawy innych porad? Odwiedź tę stronę!

44,190 zapytań

83,990 odpowiedzi

167,204 komentarzy

21,133 pasjonatów

Przeglądających: 146
Pasjonatów: 4 Gości: 142

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...