команда find / grep без поиска подключенных общих ресурсов

35

Когда я использовал команду find, мне почти всегда приходилось искать локальные диски. Но у меня почти всегда установлены супер-большие сетевые ресурсы, и они включены в поиск. Есть ли простой способ исключить те, что в команде find, grep и других подобных командах? Пример:

найти / -имя .vimrc

Flotsam N. Jetsam
источник

Ответы:

46

Используйте -fstype localопцию, чтобы найти:

find / -fstype local -name .vimrc

Если вы хотите исключить только определенные пути, вы можете использовать -prune:

find / -name /path/to/ignore -prune -o -name .vimrc

Обновить:

localПсевдо-FSType доступна в версии находки , которая поставляется с OS X, но не в GNU находке ( fstypes признаваемых GNU находки ).

Если вы используете GNU find (как используется в большинстве систем linux), вы вместо этого захотите использовать -mount:

find / -mount -name .vimrc
Даг Харрис
источник
это работает для grep тоже?
Flotsam N. Jetsam
1
Я не думаю, что у grep есть такая опция. Я обычно использовал findpipe, grepкак показано в этом ответе: superuser.com/questions/80033/… . В последнее время я использовал ack( betterthangrep.com ) вместо этого, но ack, кажется, не имеет возможности искать только локальные диски.
Даг Харрис
Мое редактирование было отклонено, поэтому я просто оставил комментарий. В основном первый пример неверен, потому что вам нужно добавить -pruneк нему, или он все равно будет проходить нежелательные файловые системы. Второй пример, который я считаю, был задуман -pathвместо того, -nameчтобы игнорировать путь. FWIW ... последний пример работает, он остается в «текущей файловой системе», поэтому не пересекает другие.
rogerdpack
21

man find шоу:

-xdev Не спускайте каталоги на другие файловые системы.

penguinjeff
источник
2
-xdevтак же, как -mountFWIW ... :)
rogerdpack
0

Первоначальный вопрос заключался в том, чтобы найти только на локальном диске, поэтому, для полноты, вот что я использовал;

for PART in `awk '(!/^#/ && $6 != "0" || $3 == "xfs" ) { print $2 }' /etc/fstab 2>/dev/null`; do find $PART -xdev -name .vimrc -print 2>/dev/null; done

Пока ваш fstab настроен правильно, он должен искать только локальные диски; т.е. для монтирования cifs этот конечный флаг должен быть установлен на 0. Я включил OR для файловых систем xfs, когда мы начали переходить на RHEL7, они должны быть установлены на 0 также, так как они не предназначены для перезапуска диска после стольких перезапусков.

Надеюсь, это поможет.

Шон Сондерс
источник