如何在bash中同时循环多个通配符?

问题描述 投票:3回答:2

在bash中,我编写了一个函数,它使用通配符循环遍历具有多个扩展名的目录中的文件,并仅复制这些特定文件(如果存在)。代码片段如下所示:

set -e

pushd ../../../../$3/code/project/common/ > /dev/null
mkdir -p ../$2
shopt -s nullglob

for file in *.gyp; do   cp $file ../$2/; done
for file in *.gypi; do  cp $file ../$2/; done
for file in *.sh; do    cp $file ../$2/; done
for file in *.patch; do cp $file ../$2/; done

popd > /dev/null

我宁愿写一个for file in x语句,这样我就不必为每个要复制的扩展名复制和粘贴这一行。

如何将四个for语句重写为一个for语句?如果可能的话,我想在那里的某处保留*.ext通配符格式。

bash shell for-loop wildcard
2个回答
3
投票

你应该能做到的

for file in *.gyp *.gypi *.sh *.patch; do   cp $file ../$2/; done

3
投票

Brace Expansion和一个cp命令:

cp -t ../"$2" *.{gyp,gypi,sh,patch}

总是引用你的变量,除非你确切知道你想要的副作用。

© www.soinside.com 2019 - 2024. All rights reserved.