«Найти» исключить FSTYPE Странное поведение

Догадываюсь, так как я ничего не пробовал.

Раскрытие тильды немного громоздко в переменных, так как оно раскрывается до того, как переменные arte раскрываются.

Нормально ли работает с именами файлов без тильды?

Кроме того, вам стоит проверить некоторые предположения, например, $ location , являющийся читаемым файлом. Возможно, вы захотите выйти с полезным сообщением. Возможно, это также поможет вам отладить ваш скрипт.

7
26.09.2018, 18:03
2 ответа

Директива -fstypeпредписывает findне возвращать результаты, относящиеся к этому типу файловой системы. Это, однако, не означает, что он не будет просматривать каталог /proc. Это просто означает, что он не будет возвращать файлы, найденные в файловой системе proc. Тем не менее, ему все равно нужно пройти через каталог /proc, так как нет способа узнать, было ли что-то, не -proc файловая система, смонтировано в /proc/something. Например, на моей Арке я нахожу:

$ find /proc ! -fstype proc -printf '%p %F\n' 2>/dev/null 
/proc/sys/fs/binfmt_misc binfmt_misc
/proc/sys/fs/binfmt_misc/CLR binfmt_misc
/proc/sys/fs/binfmt_misc/register binfmt_misc
/proc/sys/fs/binfmt_misc/status binfmt_misc

Это потому, что /proc/sys/fs/binfmt_misc/не является файловой системой proc:

$ mount | grep proc
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=51,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=12642)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)

Таким образом, в /procесть две точки монтирования, которые содержат не -proc файловые системы.

Имея это в виду, обратите внимание, что ваш вопрос показывает только сообщения об ошибках. Ни один из этих файлов на самом деле не был возвращен find, поэтому, похоже, он ведет себя так, как ожидалось. Он просматривает файлы в /proc, но не считает их совпадениями, если они находятся в файловой системе proc.

5
27.01.2020, 20:16

Как объяснил terdon , findпо-прежнему будет входить в каталог /proc, но не будет возвращать никаких путей из этого типа файловой системы.

Чтобы удалить любой путь поиска, как только будет обнаружен тип файловой системы proc, используйте

find / -fstype proc -prune -o -print

Однако, поскольку вы хотите сделать это на старом find, опция -fstypeможет быть недоступна. Если-path(стандартная опцияfind)также недоступна, то становится немного сложно предлагать предложения, поскольку реализация явно несовместима с POSIX.

Одним из вариантов может быть использование -xdev, что заставит findоставаться строго в той же файловой системе, что и начальный путь. Затем вам нужно будет запустить по одному findдля каждой файловой системы, которую вы хотите проверить. Также может быть опция с именем -x(, как в системах BSD ), которая действует как -xdev.

Если и это невозможно, то вам, возможно, придется прибегнуть к использованию -type d -name proc -prune, чтобы игнорировать все каталоги, которые вызываются proc.

8
27.01.2020, 20:16

Теги

Похожие вопросы