在 bash 中循环查找结果

Loop over find result in bash

我有一个 bash 脚本是我公司以前的同事写的。它的 shellcheck 结果太糟糕了,我使用 zsh 不能 运行 脚本。他似乎在 bash 中使用了臭名昭著的 find with for loop thingy。但我不知道如何让它变得更好。

目前我得到了临时修复。

这是他的代码

#!/bin/bash

  releases=$(for d in $(find ${DELIVERIES} -maxdepth 1 -type d -name "*_delivery_33_SR*" | sort) ; do echo ${d##*_} ; done)
  
  
  for sr in ${releases[@]}
  do
         echo "Release $sr"
         deliveries=$(find ${deliveries_path}/*${sr}/ -type f -name "*.ear" -o -name "*.war" | sort)
         if [ ! -e ${sr}.txt ]
         then
                 for d in ${deliveries[@]}
                 do
                         echo "$(basename $d)" | tee -a ${sr}.txt
                 done
         fi
         echo
  done

这是我的代码,它甚至循环了第一部分。

#!/bin/bash
                                                                                                                                                             
  for release in $(for d in $(find "${DELIVERIES}" -maxdepth 1 -type d -name "*_delivery_33_SR*" | sort) ; do echo "${d##*_}" ; done)
  do                                                                                                                                 
    echo "Release $release"                                   
  done

如您所见,我需要将查找放在循环中,但我无法将其保存在变量中,因为当我尝试循环时,它会尝试将 \n 放在任何地方,它就像一个元素? any1能不能给个建议,这个问题应该怎么解决,因为以前的同事经常用这种find搜索。

编辑:

脚本转到每个具有特定名称的文件夹,然后创建一个文件 X.X.X.txt,其中 X 部分包含版本号。并将子文件夹内的文件名附加到 X.X.X.txt

盲目重构让我变得像

#!/bin/bash

for d in "$DELIVERIES"/*_delivery_33_SR*/; do
    sr=${d##*_}
    echo "Release $sr"
    if [ ! -e "${sr}.txt" ]
    then
        find "${deliveries_path}"/*"${sr}"/ -type f -name "*.ear" -o -name "*.war" |
        sort |
        xargs -n 1 basename |
        tee -a "$sr.txt"
    fi
    echo
done