Догадываюсь, так как я ничего не пробовал.
Раскрытие тильды немного громоздко в переменных, так как оно раскрывается до того, как переменные arte раскрываются.
Нормально ли работает с именами файлов без тильды?
Кроме того, вам стоит проверить некоторые предположения, например, $ location
, являющийся читаемым файлом. Возможно, вы захотите выйти с полезным сообщением. Возможно, это также поможет вам отладить ваш скрипт.
Директива -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
.
Как объяснил 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
.