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

Bash tworzenie skryptów Linux

Konferencja JOIN! 2018
0 głosów
233 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 niezalogowany

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 niezalogowany

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 niezalogowany
Wskazówka: przyjrzyj się parametrowi -samefile w find
komentarz 14 listopada 2017 przez niezalogowany

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 niezalogowany

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 niezalogowany
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 niezalogowany
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 77 wizyt
0 głosów
1 odpowiedź 43 wizyt
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

55,142 zapytań

99,365 odpowiedzi

204,369 komentarzy

27,139 pasjonatów

Przeglądających: 394
Pasjonatów: 21 Gości: 373

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.

...