Как исключить из поиска папки proc и sys с помощью команды find?

10

Я хотел выполнить скрипт, который выбирает случайный путь к каталогу:

find / -type d | shuf -n1 

К сожалению, я получаю сообщения об ошибках о запрете входа в определенные каталоги.

Как я могу исключить каталог из поиска с помощью find?

Абдул Аль Хазред
источник

Ответы:

13

Чтобы исключить определенные пути, в Linux:

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

Другой подход состоит в findтом, чтобы запретить повторение в разных файловых системах.

find / -xdev -type d

Вы также можете использовать locate для запроса к базе данных имен файлов (обычно обновляемой ночью, вы также можете обновить ее вручную updatedb) вместо действующей системы.

locate '*' | shuf -n 1
Жиль "ТАК - прекрати быть злым"
источник
отлично, коротко и проницательно. find / -xdev -type d сам по себе работает, но find / -xdev -type d | shuf -n 1 отображает сообщения об ошибках.
Абдул Аль Хазред
1
@AbdulAlHazred Вы не сказали, что за сообщения, но я предполагаю, что это ошибки «отказано в разрешении». Либо выполнить команду как корень или просто игнорировать ошибки, отправляя их на STDERR: find / -xdev -type d 2>/dev/null.
Terdon
1
Не могли бы вы просто сделать Это было find / \( -path /sys -o -path /proc \) -prune -o -type dбы полезно, если вы хотите исключить больше каталогов, таких как /devили /tmp, и т. Д.
BrainStone
6

с GNU find вы также можете использовать параметры регулярных выражений, например, так:

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d
хосе
источник
на сегодняшний день это самый хороший подход (rant: так что есть опция gnu, которая делает find / usable в gnu linux, как и в любой другой ОС, у которой не было реализации shitty / proc ;-)
Florian Heigl