2016-10-15 2 views
1

Итак, у меня есть множество измерений для изменяющегося параметра T от разных клиентов. Файлы сохраняются в ${LOGDIR} и придерживаться следующей схеме именования:bash - подстановочные знаки в списке файлов

${LOGDIR}/client<id>/client_<id>_blahblah_T=<param_value>_rep=<rep_no>.log 

Теперь я хочу, чтобы выбрать файлы всех клиентов для фиксированного T,rep

for rep in {1..5} 
do 
    outfile=${OUTDIR}/"aux_rep${rep}.dat" 
    for T in {1..64} 
    do 
     files="${LOGDIR}/log_client"*"/client"*"_T=C=${T}_rep=${rep}.log" 
     echo "new iteration" 
     printf '%s\n' "${files[@]}" 
    done 
done 

это получает меня ровно один выход на итерацию:

new iteration 
/home/.../log_client*/client*_T=<param_value>_rep=<rep_no>.log 

Теперь, очевидно, я хотел бы эти * были решены.

И я немного удивлен, потому что я использовал

files="${LOGDIR}/${prefix}"*"${interm}"*"${ext}" 

в других сценариях успешно (хотя это было не в цикле, и все файлы были в том же каталоге).

Как я могу получить files, чтобы перечислить правильные файлы данных?

ответ

2

Эта линия не объявляя и заселение files массива:

files="${LOGDIR}/log_client"*"/client"*"_T=C=${T}_rep=${rep}.log" 

Он должен быть изменен на это, чтобы заполнить files массив:

files=("${LOGDIR}/log_client"*"/client"*"_T=C=${T}_rep=${rep}.log") 
+0

Это сделали это, спасибо. Но почему тогда не было проблем с '' files = "$ {LOGDIR}/$ {prefix}" * "$ {interm}" * "$ {ext}" '', когда все файлы находились в одном каталоге? – User1291

+0

Это не расширит globs и не сделает 'files' массив с расширенными именами совпадающих файлов. – anubhava

+1

Как ни странно, это было так. В любом случае, это не важно, теперь, когда вы разместили правильный способ сделать это. Было просто интересно. – User1291