Bash脚本:检查循环中的多个文件条件
我正在编写一个bash脚本,如果目录中有扩展名文件:jpg、jpeg或png,则可以执行一些操作。但当我尝试用for或while循环检查时,我把事情搞砸了Bash脚本:检查循环中的多个文件条件,bash,loops,conditional-statements,Bash,Loops,Conditional Statements,我正在编写一个bash脚本,如果目录中有扩展名文件:jpg、jpeg或png,则可以执行一些操作。但当我尝试用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/*
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
我这里缺少什么?您使用的是readarray而不是.txt,只需输入您想要的扩展名即可
readarray FILES <<< "$(find . -name "*.txt")";
for file in ${FILES[@]}; do
echo $file
done
您使用的是readarray而不是.txt,只需放置您想要的任何扩展名即可
readarray FILES <<< "$(find . -name "*.txt")";
for file in ${FILES[@]}; do
echo $file
done
以下是我认为迭代多类型文件扩展名更容易的方法。我希望您知道如何继续,您可以在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
以下是我认为迭代多类型文件扩展名更容易的方法。我希望您知道如何继续,您可以在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
为什么不做点什么*.jpg*.jpeg*.png?如果没有,你什么也不做。或者使用find-name*.jpeg或任何其他你想要的模式作为它们的名称,并将它们添加到你的工作中。没有理由检查周围的所有文件名,shell会用一个命令或一个glob为你提供这些文件。如果目录中有扩展名文件还是要迭代这些文件?如果这是重复的?@KamilCuk:只想迭代这些文件。为什么不做一些事情?*.jpg*.jpeg*.png如果没有,你将什么也不做。或者使用find-name*.jpeg或任何其他你想要的模式作为它们的名称,并将它们标记到你的工作中。没有理由更改它们检查周围的所有文件名,shell通过一个命令或一个glob为您提供这些文件。如果目录有扩展名文件,您想做些什么,或者您想迭代这些文件吗?如果这是重复的?@KamilCuk:只想迭代这些文件。这不是用*.txt编写文件的更复杂的方法吗?这是一个lso下放到子目录中,可能需要也可能不需要。这难道不是在*.txt中编写文件的更复杂的方法吗?它也下放到子目录中,可能需要也可能不需要。echo hi$我可以防止分词和文件名中的特殊字符出现问题。@BenjaminW。你说得对。我会改进示例,不是吗如果没有shopt-s nullglob,您将在没有文件存在的情况下获得模式。我建议……;如果[!-e$I];然后继续;fi;…doneecho hi$我将防止出现分词和文件名中特殊字符的问题。@BenjaminW。你说得对。我将改进示例,谢谢你没有shopt-s nullglob,你将在没有文件时获得模式。我建议……;如果[!-e$i];然后继续;fi;…完成