• 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 START
0 głosów
76 wizyt
pytanie zadane 4 dni temu 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 4 dni temu przez shead VIP (140,540 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 4 dni temu przez pjeter Nowicjusz (120 p.)
edycja 4 dni temu 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 4 dni temu przez shead VIP (140,540 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ź 4 dni temu przez shead VIP (140,540 p.)
Wskazówka: przyjrzyj się parametrowi -samefile w find
komentarz 4 dni temu przez shead VIP (140,540 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 4 dni temu przez shead VIP (140,540 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 3 dni temu 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 3 dni temu przez shead VIP (140,540 p.)
Nie potrzebujesz -print, tyle powinno wystarczyć
komentarz 3 dni temu 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 9 godziny temu 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 7 godziny temu przez shead VIP (140,540 p.)
Jak dla mnie to templatka na find'a więc raczej wciąż zostaje to poprawne ;0
komentarz 7 godziny temu przez pjeter Nowicjusz (120 p.)
Dzięki więc tak  to wyślę do oceny.

Podobne pytania

0 głosów
0 odpowiedzi 33 wizyt
0 głosów
0 odpowiedzi 60 wizyt
pytanie zadane 9 czerwca w Systemy operacyjne, programy przez nalq Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 63 wizyt
pytanie zadane 1 czerwca w Systemy operacyjne, programy przez smyko_k Nowicjusz (140 p.)

41,282 zapytań

80,223 odpowiedzi

158,700 komentarzy

19,710 pasjonatów

Przeglądających: 269
Pasjonatów: 24 Gości: 245

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.

...