Команда find не может найти файл в конвейере

У меня есть файл с именем .sock в директории / var / spool / .

Вот результат ls -al / var / spool /

drwxr-xr-x.  9 root     root 121 Dec 16 09:55 .
drwxr-xr-x. 19 root     root 267 Dec 14 10:47 ..
drwxr-xr-x.  2 root     root  63 Oct 28  2019 anacron
drwx------.  2 root     root   6 Feb 13  2019 cron
drwxr-xr-x.  2 root     root   6 Dec 14  2017 lpd
drwxrwxr-x.  2 root     mail  22 Dec 14 10:47 mail
prw-r--r--.  1 telegraf root   0 Dec 17 10:04 nethermind.sock
drwxr-xr-x. 16 root     root 201 Jul 29  2019 postfix
drwxr-xr-x.  3 root     root  19 Oct 28  2019 rhsm
drwx------.  2 root     root   6 Sep  6  2018 up2date

. Вы можете видеть, что файл nethermind.sock помечен как prw-r - r-- .

Я хочу удалить этот файл, поэтому я пишу это в своем скрипте -

NETHERMIND_SOCK="/var/spool/nethermind.sock"
PARITY_SOCK="/var/spool/parity.sock"

if [ -f $NETHERMIND_SOCK ]; then
    rm -f $NETHERMIND_SOCK
elif [ -f $PARITY_SOCK ]; then
    rm -f $PARITY_SOCK
else
    echo ".sock not found"
fi

Он всегда дает .sock not found Затем я попытался найти и удалить, например -

sudo find / -type f -name "* .sock" -exec rm -f {} +

Но похоже, что файл невозможно найти.

Если я выполню sudo find / var / spool / -type f -name "nethermind.sock" , он ничего не вернет.

Я не уверен насчет знака p отсюда prw-r - r--.

Вот ссылка , что на самом деле означает p . Но команда find не может найти передаваемый файл.

2
задан 17 December 2020 в 18:37

1 ответ

Поскольку ваш файл не обычный файл, а канал, вы не можете использовать [ -f ...] или -тип f. Вместо этого используйте [-p ... ] opr -тип p:

if [ -p $NETHERMIND_SOCK ]; then
    ....

или

sudo find / -type p -name "*.sock" ...
5
ответ дан 17 December 2020 в 15:46

Другие вопросы по тегам:

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