Я пытался перебирать списки файлов и применять к ним операцию в зависимости от их числа. Сначала я попытался с помощью команды ls
, но выход не список:Цитирование по спискам файлов с bash - синтаксическая ошибка
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, а затем он выдает синтаксическую ошибку:
syntax error near unexpected token `('
Я предполагаю, что это проблема с интерпретатором bash? Любая подсказка, как еще я мог бы перебирать эти файлы?
Благодаря
Edit: Я также попытался
files=$data$sam/*
, который выводит
echo ${files[0]}
data2/Scerevisiae-Pho4/GSM730517/*
У вас есть '#!/Bin/bash' в верхней части вашего скрипта? –
Вам даже не нужна переменная 'files'. Просто используйте: 'echo '$ data $ sam"/* ' – anubhava
Мне нужна переменная, потому что мне нужно подсчитывать файлы в каждой директории, а затем цикл и объединять их, если несколько. – rioualen