Komendy Linux: Wyszukiwanie plików i katalogów
Zastosowanie polecenia find pozwala odnaleźć nie tylko pliki i katalogi, ale także inne elementy na dysku, gdyż posiada najbardziej zaawansowane operacje wyszukiwania. Jako parametr podajemy ścieżkę, w której system ma szukać danego elementu, i opcje, jakie ten element powinien posiadać.
user@linux:~$ find ./ -name 'p*'
./plik1.txt
./plik2.txt
Parametry komendy (find):
- - depth
Użycie tego parametru powoduje przetwarzanie zawartości katalogu przed sprawdzeniem samego katalogu.
- - maxdepth
Dzięki temu parametrowi możemy zdefiniować „głębokość" schodzenia w poszukiwaniu danego elementu, określając maksymalne zagnieżdżenie.
user@linux:~$ find ./ -maxdepth 3 -name '*'
./
./nowy_plik.txt
./nowy_plik (kopia).txt
./plik2.txt
./plik1.txt
- - mindepth
Dzięki temu parametrowi możemy zdefiniować „głębokość" poszukiwania, określając minimalną głębokość, do której należy zejść w poszukiwaniu danego elementu.
user@linux:~$ find ./ -mindepth 1 -name '*'
./
./nowy_plik.txt
./nowy_plik (kopia).txt
./plik2.txt
./plik1.txt
W kilku parametrach, które zostaną teraz omówione, występuje litera n . Oznacza ona wartość, którą można podstawić w jej miejsce. Możemy wpisać dowolną znaną wartość lub wartość ze znakiem "+"" (plus - więcej niż, np. +1 to więcej niż 1) bądź - (minus - mniej niż, np. - 5 to mniej niż 5. Zastosowanie polecenia z tym parametrem pozwala wyszukać pliki, do których dostęp nastąpił n minut temu.
- -amin
Wyszukuje pliki które zostały otworzone n*24 godziny temu, gdzie n oznacza wpisywaną wartość.
user@linux:~$ find ./ -amin +1 -name 'p*'
./plik1.txt
./plik2.txt
user@linux:~$ find ./ -amin -1 -name 'p*'
./plik2.txt
- - cmin
Wyszukuje pliki, których status został zmieniony n minut temu.
user@linux:~$ find ./ -cmin -4 -name 'p*'
./kat1/kat2/plik1.txt
- - ctime
Wyszukuje pliki, których status został zmieniony n * 24 godziny temu.
- - empty
Wyszukuje pliki puste.
user@linux:~$ find ./ -empty -name 'p*'
./plik1.txt
- - group
Wyszukuje pliki należące do danej grupy.
user@linux:~$ find ./ -empty -group users -name 'p*'
./plik1_bkp.txt
./katalog2
./katalog5
- - iname
Wyszukuje pliki, których nazwy pasują do wzorca, jednak nie uwzględnia różnicy w wielkości liter w nazwach elementów.
- - links
Wyszukuje pliki mające dowiązania.
user@linux:~$ find ./ -links 1 -name '*'
./kat1/kat2
./plik.tar
./plik.tar.gz
./kopia.txt
user@linux:~$ find ./ -links 2 -name '*'
./
/kat2/folder/bkp
./kopia~
- - mmin
Wyszukuje pliki modyfikowane n minut temu.
user@linux:~$ find ./ -mmin 10
./kat1/kat2/plik1
- - mtime
Wyszukuje pliki modyfikowane n * 24 godziny temu.
- - name
Wyszukuje pliki, których nazwa pasuje do wzorca.
user@linux:~$ find ./ -name 'p*i?'
./kat1/kat2/plik1
./kat1/plik1
./plik1
./plik2
- - nouser
Wyszukuje pliki, do których nie pasuje żaden użytkownik.
- - nogroup
Wyszukuje pliki, do których nie została przypisana grupa.
- - perm [prawa]
Wyszukuje pliki, dla których określono odpowiednie prawa dostępu.
user@linux:~$ find ./ -perm 777
./kat1/kat2/plik1
./plik2
- - perm [-prawa]
Wyszukuje pliki, dla których wszystkie bity praw zostały ustawione.
- - perm [+prawa]
Wyszukuje pliki, w których jakikolwiek z bitów praw jest ustawiony.
- - regex [wzorzec]
Wyszukuje pliki posiadające nazwę zgodną ze wzorcem. Wzorzec definiuje się zgodnie z prawami dotyczącymi wyra żeń regularnych.
- - size [rozmiar pliku]
Wyszukuje pliki o określonym rozmiarze - w tym przypadku jest to tyle, ile jest zajętych bloków, czyli 512 jednostek bajtowych na dysku.
user@linux:~$ find ./ -size +1
./kat1/kat2/plik1
./plik2
./kat1/kat2
./plik.tar
./plik.tar.gz
./kopia.txt
- - type [-typ pliku]
Wyszukuje elementy należące d o określonego w parametrze typu (katalogi, pliki, dowiązania lub urządzenia).
user@linux:~$ find ./ -type d
./kat1/kat2/plik1
./kat3
./folder1
Typy elementów to:
- -b - plik blokowy,
- -c - plik specjalny,
- -d - katalog,
- -p - nazwany potok,
- -f - zwykły plik,
- -l - dowiązanie symboliczne,
- -s - gniazdo.
- -user [nazwa użytkownika]
Wyszukuje pliki, których właścicielem jest podany użytkownik.
user@linux:~$ find ./ -user root
user@linux:~$ find ./ -user user
user@linux:~$ find ./
./kat1/kat2
./plik.tar
./plik.tar.gz
./kopia.txt