在bash脚本中获取包含下划线的文件

And*_*the 1 linux bash debian

在包含一堆文件的目录中,如下所示:

./test1_November 08, 2014 AM.flv
./test2.flv
./script1.sh
./script2.sh
Run Code Online (Sandbox Code Playgroud)

我只想处理扩展名为.flv且没有下划线的文件。我试图消除下划线,但运气不好。

bash --version
GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

脚本:

#!/bin/bash

FILES=$(find . -mtime 0) 
for f in "${FILES}"
do
        if [[ "$f" != *_* ]]; then
                echo "$f"
        fi
done
Run Code Online (Sandbox Code Playgroud)

这没有给我文件。将更!=改为==会给我所有文件,而不仅仅是带下划线的文件。关于SO的其他答案表明这应该可行。

我在这里缺少简单的东西吗?

anu*_*ava 5

您可以使用以下扩展的glob模式:

shopt -s extglob
echo +([^_]).flv
Run Code Online (Sandbox Code Playgroud)

+([^_]) 将匹配任何一个或多个非下划线字符。

测试:

ls -l *flv
-rw-r--r-- 1 user1 staff 0 Nov  8 12:44 test1_November 08, 2014 AM.flv
-rw-r--r-- 1 user1 staff 0 Nov  8 12:44 test2.flv

echo +([^_]).flv
test2.flv
Run Code Online (Sandbox Code Playgroud)

要循环处理这些文件,请使用:

for f in +([^_]).flv; do
   echo "Processing: $f"
done
Run Code Online (Sandbox Code Playgroud)

PS:不确定您使用的是什么-mtime 0find因为我的答案是否符合要求:

我只想处理扩展名为.flv且没有下划线的文件