Есть ли способ показать «Файл не найден» или подобное сообщение при использовании команды `find`?

1096
jimm-cl

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

Я думаю, что это хорошо, так как findкоманда предназначена для поиска файлов, которые на самом деле существуют в первую очередь (d'oh). Но мне интересно, есть ли у команды способ findвернуть сообщение типа «Файл не найден» или подобное, чтобы сообщить, что файла нет, вместо того, чтобы молча провалиться (или завершиться).

Я подумал, что, возможно, я мог бы обойти проблему, используя findкод возврата путем запроса $?, но даже когда файл не найден, код возврата есть 0.

Просто пример того, что у меня есть ...

find . -name foo.sh  find . -name bar.sh  

и что он возвращает в случае, если единственный файл там foo.sh:

./directory/foo.sh 

То, что я хотел бы получить, это:

./directory/foo.sh bar.sh not found 

Кто-нибудь знает findфлаг или любой другой обходной путь, который я могу использовать?
Спасибо!

1

2 ответа на вопрос

2
user3631881

Я не думаю, что у find есть возможность сказать « то, что вы искали, не было найдено ».

Вы можете посчитать количество строк, возвращаемых функцией find, и, если оно равно 0, вывести сообщение «not found». Что-то вроде:

#/bin/bash  # put find output to a temp file find . -name 'foo.sh' > /var/tmp/find.tmp.$$  # count the number of lines COUNT=`wc -l /var/tmp/find.tmp.$$ | awk '{ print $1 }'`   if [ $COUNT -eq 0 ] then # find didn't return any results, so print message echo "foo.sh not found" else # find returned results, print them cat /var/tmp/find.tmp.$$ fi # remove temp file rm /var/tmp/find.tmp.$$ 

Он выведет вывод команды find, если были какие-либо результаты, или « foo.sh not found », если результатов не найдено.

Звучит как хорошая идея, если вы хотите создать оболочку для `find`, но в этом случае я просто хотел простой однострочной, просто чтобы знать, что файла там нет. +1 в любом случае, потому что, как я уже сказал, это хорошая идея. Спасибо! jimm-cl 10 лет назад 0
0
user322483

Вы можете попытаться find . -name foo | grep \/установить код выхода.

grep ищет любые / в выходных данных и возвращает код выхода 1, если ничего не найдено

Genius! Я могу использовать: `найти. имя foo | grep \ / || echo "Файл не найден". Спасибо! jimm-cl 10 лет назад 0

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