在 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
我有一个 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