Skocz do zawartości

Wyszukiwanie Plików Regularnych W Linuxie.


Gość Michał

Rekomendowane odpowiedzi

Witam, otóż mam problem, ponieważ muszę wyszukać katalogi zawierające pliki regularne (bez podkatalogów). Wiem że do tego trzeba użyć programu find, jednak w manualu znajduje się tylko jedna opcja (-empty), która znajduje tylko pliki puste albo regularne. Kompletnie tego nie rozumiem. Czy potrafiłby mi ktoś pomóc? Z góry dziękuję.

 

Pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

No dzięki, widzę że bardzo podobny temat, tylko ja nie wiem co to są w ogóle te "pliki regularne" w google nie mogę znaleźć żadnych jasnych informacji na ten temat, nie mówiąc już o ich wyszukiwaniu poprzez find.

Odnośnik do komentarza
Udostępnij na innych stronach

Podstawy Linuksa sie klaniaja, ale tego powinienes uczyc sie w szkole.

 

W Linuksie plikiem jest link symboliczny, katalog, program, plik tekstowy, plik binarny (np. biblioteka), plik wykonywalny (odpowiednik windowsowego .exe) itp. Plik regularny w tym kontekscie, to prawdopodobnie kazdy plik, który nie jest katalogiem lub linkiem symbolicznym. Wykonaj polecenie

ls -l 

w dowolnym katalogu. Wszystko gdzie pierwszym znakiem w linii jest myslnik, to plik regularny.

Np.

[waldo@F16 ~]$ ls -l /bin/sh
lrwxrwxrwx. 1 root root 4 03-22 19:19 /bin/sh -> bash  
[waldo@F16 ~]$ ls -l /bin/bash
-rwxr-xr-x. 1 root root 967072 03-13 16:53 /bin/bash 

/bin/bash jest plikiem regularnym a /bin/sh nie jest plikiem regularnym (link symboliczny).

Odnośnik do komentarza
Udostępnij na innych stronach

A to bardzo dzięki za to, teraz pozostaje się pomęczyć trochę jak wyświetlić wszystkie katalogi zawierające pliki regularne, w /usr i /var, ale mam nadzieję że już sam to rozgryze jakoś.

 

Pozdrawiam :)!

Odnośnik do komentarza
Udostępnij na innych stronach

Witam w ten sloneczny dzionek :) !

 

Z góry przepraszam za pisanie posta pod postem, ale dzis sie dopiero zarejestrowalem a tamtego nie moge edytowac.

Otóz chyba jestem na dobrej drodze zeby rozwiazac mój problem, chce sie w sumie upewnic tylko czy dobrze wyszukalem pliki regularne i wyswietlilem je w katalogach.

 

Wklepalem to w terminal:

find /{us,va}r -maxdepth 1 ! -empty ! -type l

 

Find zwrócil to:


/usr
/usr/include
/usr/share
/usr/lib
/usr/bin
/usr/libexec
/usr/sbin
/usr/src
/usr/local
/var
/var/empty
/var/cache
/var/spool
/var/tmp
/var/log
/var/db
/var/lib

Pierwsze, ze katalogi usr i var ma przeszukac;

Drugie (maxdepth 1), wyswietla tylko katalogi glówne bez podkatalogów;

Trzecie (! empty), Wyrzuca wszystkie puste pliki i katalogi (tego nie jestem pewnien);

Czwarte (!-type l), Tu dziekuje za pomoc koledze powyzej, za pomocy tego wyrzucam wszystkie pliki zawierajace dowiazanie symboliczne.

Mam nadzieje,ze dobrze to ruszylem.

 

A podam jeszcze tresc polecenia:

 

W jednym zestawieniu nalezy przedstawic tylko wszystkie katalogi zawarte w strukturach /{us,va}r, które zawieraja jedynie pliki regularne bez podkatalogów.

 

Prosze o jakies potwierdzenie czy to jest dobrze.

 

Pozdrawiam,

Michal

Odnośnik do komentarza
Udostępnij na innych stronach

Nie mam pojecia w jaki sposób chcesz rozwiazac zadanie, kiedy nie rozumiesz tresci... Kazdy z tych katalogów, które zwrócil Ci taki find zawiera podkatalogi, a Ty masz zwrócic te, "które zawieraja jedynie pliki regularne bez podkatalogów." Ten Twój kolega z watku http://forum.fedora.pl/topic/25341-wyszukiwanie-najglebszych-podkatalogow przynajmniej zrozumial polecenie, bo rzeczywiscie zadanie sprowadza sie do zwrócenia najglebszych podkatalogów, czyli lisci, jesli przedstawic to na strukturze drzewiastej. A wlasnie w drzewie najczesciej jest przedstawiany system plików.

Odnośnik do komentarza
Udostępnij na innych stronach

Dziekuje serdecznie, nie spostrzeglem ze to wystarczy wkleic tylko do basha ze zmieniona sciezka..

 

A moge sie jeszcze dowiedziec co znaczy ta linia?

 

while read -r line

 

Rozumiem ze while to petla ale nie wiem co znaczy read -r line

Próbowalem cos wyczytac w man read - i czy dobrze zrozumialem ze to jest przejscie do kolejnej linii?

Odnośnik do komentarza
Udostępnij na innych stronach

Juz chyba ostatni raz pisze :)

Zmodyfikowalem ten skrypt na potrzeby mojego zadania, bo oprócz tych katalogów maja sie jeszcze wyswietlac pewne informacje o nich, robie to za pomoca opcji -printf

 

Mój zmodyfikowany skrypt wyglada nastepujaco:


find /{us,va}r -type d ! -type l ! -empty -printf '%d, %i, %s, %M, %m, %u, %p\n\r' | while read -r line
do
if ! ls -l "$line" | grep -q '^d'
then
	echo "$line"
fi
done

 

I wyswietla cos takiego:

....

3, 17755, 4096, drwxr-xr-x, 755, root, /usr/share/perl5/File
3, 17783, 4096, drwxr-xr-x, 755, root, /usr/share/perl5/IPC: Nie ma takiego pliku ani katalogu
3, 17783, 4096, drwxr-xr-x, 755, root, /usr/share/perl5/IPC
3, 17797, 4096, drwxr-xr-x, 755, root, /usr/share/perl5/Math: Nie ma takiego pliku ani katalogu

 

Czemu wyswietla bardzo czesto ze nie ma takiego pliku?

Wszystko sie zaczelo dziac po dodaniu opcji priintf..

 

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...