sim*_*mon 14 bash shell shell-script
在 bash 脚本中,我如何说“对于 .png 或 .PNG 类型的所有文件”?
我想 :
for i in (`ls *.PNG` && `ls *.png`)
Run Code Online (Sandbox Code Playgroud)
但是出现语法错误。
Gor*_*son 18
如果您想要所有可能的组合,请使用:
for i in *.[Pp][Nn][Gg]; do
Run Code Online (Sandbox Code Playgroud)
或者
shopt -s nocaseglob
for i in *.png; do
Run Code Online (Sandbox Code Playgroud)
尽管在您运行shopt -u nocaseglob
.
如果你真的只想要 .PNG 和 .png(而不是,例如,.PnG 或 .pnG),那么使用
shopt -s nullglob
for i in *.png *.PNG; do
Run Code Online (Sandbox Code Playgroud)
或者
for i in *.png *.PNG; do
[[ -e "$i" ]] || continue
Run Code Online (Sandbox Code Playgroud)
... nullglob 或存在性检查的原因是,如果您只有小写或大写扩展名,它将在文件列表中包含不匹配的模式,从而导致循环体中的错误。与 nocaseglob 一样,您可能希望之后关闭 nullglob shell 选项(尽管根据我的经验,打开 nullglob 通常是好的,尤其是在脚本中)。实际上,我认为对所有这样的文件匹配使用 nocaseglob 或存在检查是个好主意,以防万一没有匹配。
您也可以尝试一些单线,例如
找 。-iname "*.png" -exec ....
或者
找 。-iname "*.png" | xargs ....
编辑
另见@Yab关于递归的评论。
归档时间: |
|
查看次数: |
14788 次 |
最近记录: |