繁体   English   中英

Bash 脚本:在循环中检查多个文件条件

[英]Bash scripting: Checking multiple file conditions in loop

如果目录具有扩展名文件:jpg、jpeg 或 png,我正在编写一个 bash 脚本来执行某些操作。 但是当我尝试用 for 或 while 循环检查这个时我搞砸了。

while [ filename in $IMAGE_DIR/*.jp*g -o filename in $IMAGE_DIR/*.png ] ; do
        # do something here

但我收到编译错误:

第 30 行:[:参数太多

我尝试了以下循环无济于事。

for (filename in $IMAGE_DIR/*.jp*g) || (filename in $IMAGE_DIR/*.png); do
while [ filename in $IMAGE_DIR/*.jp*g ] || [ filename in $IMAGE_DIR/*.png ] ; do
while [[ filename in $IMAGE_DIR/*.jp*g ]] || [[ filename in $IMAGE_DIR/*.png ]] ; do
while [[ filename in $IMAGE_DIR/*.jp*g ] || [ filename in $IMAGE_DIR/*.png ]] ; do
while (( filename in $IMAGE_DIR/*.jp*g )) || (( filename in $IMAGE_DIR/*.png )) ; do
while ( filename in $IMAGE_DIR/*.jp*g )) || (( filename in $IMAGE_DIR/*.png ) ; do

我在这里缺少什么?

这是我认为迭代多个“类型|扩展名”文件更容易的方式。 我希望您知道如何继续,您可以在该 for 循环中创建 if 条件。

$ ls -l
-rw-rw-r--  1 lucas lucas    0 Sep 25 13:58  test.jpeg
-rw-rw-r--  1 lucas lucas    0 Sep 25 13:58  test.jpg
-rw-rw-r--  1 lucas lucas    0 Sep 25 13:58  test.png
-rwxrwxr-x  1 lucas lucas   62 Sep 25 13:59  test.sh

$ cat test.sh 
#!/bin/bash
for i in *.jpg *jpeg *.png; do
  echo "hi $i"
done

$ ./test.sh 
hi test.jpg
hi test.jpeg
hi test.png

您使用的是readarray而不是“.txt”,只需放置您想要的任何扩展名。

readarray FILES <<< "$(find . -name "*.txt")";
for file in ${FILES[@]}; do
    echo $file
done  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM