Используя команду grep, я могу распечатать данные, которые соответствуют моей команде, но как напечатать ошибку, когда данные недоступны? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть файл device.json, доступный в моих подкаталогах, и из этого файла .json я пытаюсь напечатать значение data = xxx и использую следующую команду Grep, но я также хотел напечатать ошибку, когда файл device.jsonнедоступно в одном из подкаталогов.

найти.имя "device.json" |xargs grep -E 'data'

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Попробуйте что-то вроде:

find . -type d |
while IFS= read -r dir; do
    file="$dir/device.json"
    if [ -f "$file" ]; then
        grep 'data' "$file"
    else
        printf '"%s" does not exist\n' "$file"
    fi
done

Сбой будет только в том случае, если имена каталогов могут содержать символы новой строки.Очевидно, grep 'data' - это не надежный способ найти требуемое значение в файле json, но это отдельная проблема.

0 голосов
/ 06 февраля 2019

Если вы хотите узнать о каталогах, которые не содержат запись «device.json», то find . -name device.json не собирается ее обрезать.Вам нужно будет сделать что-то вроде:

find . -type d -exec sh -c 'for x; do f="$x/device.json"; if test -f "$f"; 
    then grep -H data "$f"; else echo "$f: No such file" >&2; fi; done' _ {} \+ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...