Как зациклить несколько подстановочных знаков одновременно в bash - PullRequest
0 голосов
/ 17 февраля 2019

В 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, чтобы мне не приходилось копировать и вставлять эту строку для каждого расширения, которое я хочуcopy.

Как переписать четыре оператора for как один оператор for?Я хотел бы сохранить формат подстановочного знака *.ext где-нибудь там, если это возможно.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Расширение Brace и одна команда cp:

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

Всегда указывайте в кавычках свои переменные, если только вы точно не знаете, какие побочные эффекты вы хотите.

0 голосов
/ 17 февраля 2019

Вы просто должны быть в состоянии сделать

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