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?

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

ś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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.