我需要两个创建一个新的 bash 数组,不包括第二个数组中的元素。然后在 while 循环中使用这个数组:
while [ -n "${ids_toproc[0]}" ] ; do
这是一个实现的代码:
all_ids=( /input/sub-* )
all_ids=( "${all_ids[@]#/input/sub-}" )
all_ids=( "${all_ids[@]%/}" )
exist_ids=( /output/fmriprep/sub-*.html )
exist_ids=( "${exist_ids[@]#/output/fmriprep/sub-}" )
exist_ids=( "${exist_ids[@]%/}" )
exist_ids=( "${exist_ids[@]%%.*}" ) # delete extention
ids_toproc=( `echo ${all_ids[@]} ${exist_ids[@]} | tr ' ' '\n' | sort | uniq -u` )
代码没问题吗?这是正确的比较方法吗?
答案1
这是“的后续问题”docker内的shell脚本“。感谢您将其作为单独的问题发布!
由于数组的创建all_ids
需要比仅从目录名称中解析出 ID 稍微复杂一些,所以我可能会在这里做的是使用一个循环,在该循环中根据目录的文件名检查每个 ID /output/fmriprep
。如果没有找到给定 ID 的输出文件,然后该 ID 将添加到all_ids
列表中。
all_ids=()
for dirname in /input/sub-*/; do
id=${dirname#/input/sub-} # remove "/input/sub-"
id=${id%/} # remove trailing "/"
if [ ! -e "/output/fmriprep/sub-$id.html" ]; then
# no output file corresponding to this ID found,
# add it to he list
all_ids+=( "$id" )
fi
done