在 'for file in ; do ; done' 命令中排除一个文件
exclude one file in 'for file in ; do ; done' command
几个星期以来,我一直在使用 Drone.io 一个 CI/CD 工具,发现其中只能执行 bin/sh 命令,而不是 bin/bash。现在我正在寻找一个单行命令来查找 '*.yaml' 上的文件,除了 'secrets.yaml' 和 运行 一个带有找到的 *.yaml 文件的命令。
我试过的是:
find /config -maxdepth 1 -name "*.yaml" -print0 | while read -d $'[=11=]' file ; do esphome "$file" config ; done
while read 确实适用于 bin/sh
此命令有效,但无法找到排除方法 secrets.yaml
for file in config/*.yaml ; do esphome "$file" config ; done
如何排除 secrets.yaml?
你快到了。只需使用 -not
或 !
来排除您不想要的文件。
find config -type f -name '*.yaml' -not -name 'secrets.yaml' -exec esphome '{}' config \;
或者
for file in config/*.yaml; do if [ "${file##*/}" != 'secrets.yaml' ]; then esphome "$file" config; fi; done
你不需要find
。
for file in config/*.yaml; do
case "$file" in
config/secrets.yml) continue ;;
*) esphome "$file" config ;;
esac
done
或
for file in config/*.yaml; do
if [ config/secrets.yml != "$file" ]; then esphome "$file" config; fi
done
如果是bash
-
$: touch a.yaml b.yaml c.yaml secrets.yaml
$: shopt -s extglob
$: echo !(secrets).yaml
a.yaml b.yaml c.yaml
所以-
shopt -s extglob
for file in config/!(secrets).yaml; do esphome "$file" config ; done
如果您是 运行 自己的无人机实例,您可能会对 conversion extension that we wrote https://github.com/meltwater/drone-convert-pathschanged
感兴趣
该扩展允许根据更改的文件包含或排除管道或管道步骤。
- name: example
image: busybox
commands:
- echo "a file other than secrets.yaml was changed"
when:
paths:
include:
- '*.yaml'
exclude:
- secrets.yaml
几个星期以来,我一直在使用 Drone.io 一个 CI/CD 工具,发现其中只能执行 bin/sh 命令,而不是 bin/bash。现在我正在寻找一个单行命令来查找 '*.yaml' 上的文件,除了 'secrets.yaml' 和 运行 一个带有找到的 *.yaml 文件的命令。
我试过的是:
find /config -maxdepth 1 -name "*.yaml" -print0 | while read -d $'[=11=]' file ; do esphome "$file" config ; done
while read 确实适用于 bin/sh
此命令有效,但无法找到排除方法 secrets.yaml
for file in config/*.yaml ; do esphome "$file" config ; done
如何排除 secrets.yaml?
你快到了。只需使用 -not
或 !
来排除您不想要的文件。
find config -type f -name '*.yaml' -not -name 'secrets.yaml' -exec esphome '{}' config \;
或者
for file in config/*.yaml; do if [ "${file##*/}" != 'secrets.yaml' ]; then esphome "$file" config; fi; done
你不需要find
。
for file in config/*.yaml; do
case "$file" in
config/secrets.yml) continue ;;
*) esphome "$file" config ;;
esac
done
或
for file in config/*.yaml; do
if [ config/secrets.yml != "$file" ]; then esphome "$file" config; fi
done
如果是bash
-
$: touch a.yaml b.yaml c.yaml secrets.yaml
$: shopt -s extglob
$: echo !(secrets).yaml
a.yaml b.yaml c.yaml
所以-
shopt -s extglob
for file in config/!(secrets).yaml; do esphome "$file" config ; done
如果您是 运行 自己的无人机实例,您可能会对 conversion extension that we wrote https://github.com/meltwater/drone-convert-pathschanged
感兴趣该扩展允许根据更改的文件包含或排除管道或管道步骤。
- name: example
image: busybox
commands:
- echo "a file other than secrets.yaml was changed"
when:
paths:
include:
- '*.yaml'
exclude:
- secrets.yaml