在包含一堆文件的目录中,如下所示:
./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的其他答案表明这应该可行。
我在这里缺少简单的东西吗?
您可以使用以下扩展的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 0,find因为我的答案是否符合要求:
我只想处理扩展名为.flv且没有下划线的文件