我在一个目录中有一堆文件,其名称包含数字。
/mnt/exp-data/6/instrument/caen2018/stage0/S0Test_26060_500ns_CW_0ns_CBT_0ns_DEBT.root
/mnt/exp-data/6/instrument/caen2018/stage0/S0Run_26061_500ns_CW_0ns_CBT_0ns_DEBT.root
/mnt/exp-data/6/instrument/caen2018/stage0/S0Test_26063_500ns_CW_0ns_CBT_0ns_DEBT.root
/mnt/exp-data/6/instrument/caen2018/stage0/S0Run_26065_500ns_CW_0ns_CBT_0ns_DEBT.root
我想做的是找到丢失的文件,然后对这些文件做一些事情。26062在上述情况下,26064缺少包含 numbers 的文件。
到目前为止,我正在做以下事情
#___________________________________________________________________________________________________________________________
#-3-Find the missing runs
REPLAYED_RUNS_DIR=/ /mnt/exp-data/6/instrument/caen2018/stage0
echo "..........Looking for non replayed runs in the range $smallest_run-$biggest_run"
for (( i=$smallest_run; i<=$biggest_run; ++i));do
filename="$REPLAYED_DATA_DIR/*$i*.root"
#echo $filename
if [ ! -f $filename ]; then
echo "Run $i does not exist."
./produce_file $i
fi
done
这个片段设法找到丢失的文件,但是我有一些问题:
- 在某些情况下,对于确实存在的文件,我会收到以下错误,但我不知道为什么。
./check_missing.sh: line 53: [: /mnt/exp-data/6/instrument/caen2018/stage0/S0Run_25829_500ns_CW_0ns_CBT_0ns_DEBT.root: binary operator expected
- 如果我取消注释
echo filename,我会得到文件的全名和目录作为输出,就好像我在做ls instead ofecho`。这是可以预期的吗? - 有没有更好的方法(即更快、更有效)来做我想做的事情?