如何在 bash 中同时循环多个通配符?
How do I loop over multiple wildcards simultaneously in bash?
在 bash 中,我编写了一个函数,该函数使用通配符循环访问具有多个扩展名的目录中的文件,并且仅复制这些特定文件(如果它们存在)。代码片段如下所示:
set -e
pushd ../../../..//code/project/common/ > /dev/null
mkdir -p ../
shopt -s nullglob
for file in *.gyp; do cp $file ..//; done
for file in *.gypi; do cp $file ..//; done
for file in *.sh; do cp $file ..//; done
for file in *.patch; do cp $file ..//; done
popd > /dev/null
我宁愿写一个 for file in x
语句,这样我就不必为每个要复制的扩展名复制和粘贴这一行。
如何将四个 for
语句重写为一个 for
语句?如果可能的话,我想将 *.ext
通配符格式保留在那里。
你应该可以做到
for file in *.gyp *.gypi *.sh *.patch; do cp $file ..//; done
Brace Expansion 和一个 cp
命令:
cp -t ../"" *.{gyp,gypi,sh,patch}
总是引用你的变量,除非你确切地知道你想要什么副作用。
在 bash 中,我编写了一个函数,该函数使用通配符循环访问具有多个扩展名的目录中的文件,并且仅复制这些特定文件(如果它们存在)。代码片段如下所示:
set -e
pushd ../../../..//code/project/common/ > /dev/null
mkdir -p ../
shopt -s nullglob
for file in *.gyp; do cp $file ..//; done
for file in *.gypi; do cp $file ..//; done
for file in *.sh; do cp $file ..//; done
for file in *.patch; do cp $file ..//; done
popd > /dev/null
我宁愿写一个 for file in x
语句,这样我就不必为每个要复制的扩展名复制和粘贴这一行。
如何将四个 for
语句重写为一个 for
语句?如果可能的话,我想将 *.ext
通配符格式保留在那里。
你应该可以做到
for file in *.gyp *.gypi *.sh *.patch; do cp $file ..//; done
Brace Expansion 和一个 cp
命令:
cp -t ../"" *.{gyp,gypi,sh,patch}
总是引用你的变量,除非你确切地知道你想要什么副作用。