我一直试图循环通过文件列表并根据它们的编号对它们应用操作。我首先尝试使用ls
命令,但输出不是列表:
data="data2/Scerevisiae-Pho4/"
results="results3/"
samples=( "GSM730517" "GSM730528" )
if [ ! -d $results ]
then
mkdir $results
fi
for sam in ${samples[@]}
do
if [ ! -d $results$sam ]
then
mkdir $results$sam
fi
echo -e "Reading $sam directory $data$sam... \n"
files=$(ls $data$sam)
echo ${files[0]}
done
输出
echo ${files[@]}
SRR217304.sra SRR217305.sra
echo ${files[0]}
SRR217304.sra SRR217305.sra
我尝试了这种不同的语法:
files=($data$sam/*)
它在本地运行良好,但后来我将其用作snakemake工作流的shell代码,然后抛出语法错误:
syntax error near unexpected token `('
我猜这是bash解释器的问题?有什么线索我可以循环这些文件吗?
由于
编辑: 我也试过了
files=$data$sam/*
输出
echo ${files[0]}
data2/Scerevisiae-Pho4/GSM730517/*
答案 0 :(得分:1)
您不需要所有这些检查。如果目录路径尚未存在,则可以使用mkdir -p
创建目录路径。此外,您根本不需要使用数组
for d in GSM730517 GSM730528;
do p=results3/$d;
mkdir -p $p;
for f in $p/*;
do echo $f;
done;
done;
应遍历所有现有文件,将echo替换为您的呼叫。