我知道这里有很多(很多!)类似的问题,但是我找不到能解决我问题的方法。我有以下脚本:
#!/bin/bash
/* MAIN_CLASS and other declarations here */
numOfDatasets=10
for (( i=1; i <= $numOfDatasets; ++i )) do
DATASET_FILE="C:\path\to\file\name_"$i"_100.fa"
QUERY_FILE="C:\path\to\file\name_${i}_100_p"*".fasta"
mvn exec:java -Dexec.mainClass="${MAIN_CLASS}" -Dexec.args="${DATASET_FILE} ${QUERY_FILE}"
done
但是我得到了错误
java.io.FileNotFoundException:C:\ path \ to \ file \ name_1_100_p * .fasta(文件名,目录名或卷标语法不正确)
我想在不同的迭代中分配给QUERY_FILE
的字符串的一些示例是name_1_100_p95.fasta
,name_2_100_p79.fasta
,name_3_100_p89.fasta
等。
echo "name_"*"_100_p"*".fasta"
直接在终端工作。
答案 0 :(得分:0)
尝试使用内部for
循环遍历通配符搜索的结果:
for QUERY_FILE in "C:\path\to\file\name_${i}_100_p"*".fasta"; do
/* do stuff with $QUERY_FILE */
done
答案 1 :(得分:0)
您正在为QUERY_FILE
分配一个字符串值,但我想您希望它是运行命令的结果。
尝试这样的事情:
QUERY_FILE=`ls "C:\path\to\file\name_${i}_100_p"*".fasta" | head -1`
head -1
是如果您希望*
中匹配第一个文件,则可以对其进行修改以适合您的特定需求。
完整示例:
#!/bin/bash
/* MAIN_CLASS and other declarations here */
numOfDatasets=10
for (( i=1; i <= $numOfDatasets; ++i )) do
DATASET_FILE="C:\path\to\file\name_"$i"_100.fa"
QUERY_FILE=`ls "C:\path\to\file\name_${i}_100_p"*".fasta" | head -1`
mvn exec:java -Dexec.mainClass="${MAIN_CLASS}" -Dexec.args="${DATASET_FILE} ${QUERY_FILE}"
done