1

Я пытаюсь проверить наличие нескольких файлов, не зная заранее, где находятся файлы. Итак, я подумал 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 или любой другой обходной путь, который я могу использовать?
Спасибо!

2 ответа2

2

Я не думаю, что у 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 », если результатов не найдено.

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .