【问题标题】:How do I loop over multiple wildcards simultaneously in bash?如何在 bash 中同时遍历多个通配符?
【发布时间】:2019-07-11 01:49:57
【问题描述】:

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

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


【解决方案1】:

你应该能够做到

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

【讨论】:

  • 好吧,我觉得自己很傻……我想我不会想到这一点,或者这会奏效。感谢您的回答!
  • 根据您的回复和 Cyrus(从上面),我将其重写为这样,更紧凑:for file in *.{gyp,gypi,sh,patch}; do cp $file ../$2/; done,这就是我将要使用的。再次感谢!
【解决方案2】:

Brace Expansion 和一个 cp 命令:

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

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

【讨论】:

  • 假设用户传递了一个包含空格的目录名称(如 $2)。
猜你喜欢
  • 2012-05-26
  • 2011-09-10
  • 2020-07-23
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 2015-03-09
相关资源
最近更新 更多