Jak wykluczyć foldery proc i sys z wyszukiwania za pomocą polecenia find?

10

Chciałem wykonać skrypt, który wybiera losową ścieżkę katalogu:

find / -type d | shuf -n1 

Niestety otrzymuję komunikaty o błędach dotyczące zakazu wchodzenia do niektórych katalogów.

Jak mogę wykluczyć katalog z wyszukiwania za pomocą funkcji find?

Abdul Al Hazred
źródło

Odpowiedzi:

13

Aby wykluczyć określone ścieżki, w systemie Linux:

find / -path /sys -prune -o -path /proc -prune -o -type d

Innym podejściem jest findnakazanie, aby nie powtarzać w różnych systemach plików.

find / -xdev -type d

Możesz także użyć locate do zapytania do bazy danych nazw plików (zwykle aktualizowanej co noc, możesz również zaktualizować ją ręcznie za pomocą updatedb) zamiast systemu na żywo.

locate '*' | shuf -n 1
Gilles „SO- przestań być zły”
źródło
świetny, krótki i wnikliwy. find / -xdev -type d samo działa, ale find / -xdev -type d | shuf -n 1 wyświetla komunikaty o błędach.
Abdul Al Hazred
1
@AbdulAlHazred nie powiedziałeś, jakie wiadomości, ale zgaduję, że są to błędy „odmowy uprawnień”. Uruchom polecenie jako root lub po prostu zignorować błędy, wysyłając je do stderr: find / -xdev -type d 2>/dev/null.
terdon
1
Czy nie mógłbyś tego zrobić? find / \( -path /sys -o -path /proc \) -prune -o -type dPrzydałby się, jeśli chcesz wykluczyć więcej katalogów takich jak /devlub /tmpitp.
BrainStone
6

z GNU find możesz również użyć opcji wyrażenia regularnego, np. w ten sposób:

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d
jose
źródło
jest to jak dotąd najładniejsze podejście (rant: więc istnieje opcja gnu, która sprawia, że ​​find / use na Linuksie gnu jak w każdym innym systemie operacyjnym, który nie ma implementacji shitty / proc ;-)
Florian Heigl