Bash“for file in”例外

时间:2011-11-14 17:43:42

标签: bash shell

我得到了这个

for file in *; do
    any command
done

我想要做的是在“for file in *; do”中添加一个例外。

有什么想法吗?

5 个答案:

答案 0 :(得分:7)

如果您想跳过具有特定扩展名的文件,例如“.pl”,您可以这样做:

for file in *
do
    [ "${file##*.}" != "pl" ] && echo $file
done

答案 1 :(得分:2)

我认为你要问的一种方法是循环并用if语句检查文件名(或者只是grep -v ls cmd):

for file in `ls`; do
    if [ "$file" == "something" ]; then
        # do something
    else
        # something else
    fi
done

答案 2 :(得分:1)

例如,您有文件

$ ls -1 ./
./M2U0001.MPG
./M2U0180.MPG
./text

异常文件是M2U0180.MPG

$> filename="M2U0180.MPG"

$> for file in $(ls -1 ./* | grep --invert-match "${filename}" ); do echo $file; done
./M2U0001.MPG
./text

奇怪的解决方案:)

答案 3 :(得分:1)

使用bash的扩展globbing

shopt -s extglob
for f in !(excluded-file); do echo "$f"; done

答案 4 :(得分:0)

一个简单的解决方案: 以下代码段将打印pwd中具有.py扩展名

的所有文件
for i in * ;do
        if  [[ $i == *.py ]];then
                    echo "$i"
        fi
done