Как использовать команду «Найти» для поиска некоторых переменных в файлах NetCDF? - PullRequest
0 голосов
/ 11 января 2019

У меня есть много папок, содержащих файлы NetCDF (.nc). Я хочу выбрать только те, которые содержат обязательные переменные. Кажется, команда Linux find имеет эту функциональность, но я не нашел надлежащего описания. Если у кого-то есть опыт, это может быть очень полезно.

1 Ответ

0 голосов
/ 11 января 2019

попробуйте это,

# Set the required vars
REQ_VARS=( var1 var2 var3 )

# Loop through all .nc files found by find command defined after "done"
while IFS= read -r f; do
    ALL_VARS_FOUND=true

    # Loop through required vars and check if the .nc file contains it
    # If not, set ALL_VARS_FOUND to false and break the loop
    for VAR in "${REQ_VARS[@]}"; do
        ncinfo -v "$VAR" "$f" &> /dev/null || { ALL_VARS_FOUND=false; break; }
    done

    # Print the filename if ALL_VARS_FOUND is true.
    [ $ALL_VARS_FOUND == true ] && echo "$f"
done < <(find . -name "*.nc")

Если у вас есть только одна переменная для проверки, вы можете использовать find -exec

VAR=var1
find . -name "*.nc" \
  -exec sh -c 'ncinfo -v "$2" "$1" 1> /dev/null 2>&1' _ {} "$VAR" \; -print
...