0

我一直在尝试循环文件列表并根据它们的数量对它们应用操作。我第一次尝试使用该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/*)

它在本地运行良好,但后来我将其用作 shell 代码到蛇形工作流程中,然后它引发语法错误:

syntax error near unexpected token `('

我猜这是bash解释器的问题?任何线索我还能如何遍历这些文件?

谢谢

编辑:我也试过

 files=$data$sam/* 

哪个输出

echo ${files[0]}
data2/Scerevisiae-Pho4/GSM730517/*
4

1 回答 1

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 替换为您的调用。

于 2015-08-31T15:32:40.027 回答