我在文件夹中有多个文件,其文件名包含字母数字值。对于例如045_gfds.sql,46kkkk.sql,47asdf.sql等。我想比较这些文件名中的数字与存储在变量中的另一个数字,比如$×= 45,找出文件名中包含大于数字的文件。我正在使用Cygwin,目前只能使用egrep命令检索数字。例如。
filename="C:\scripts"
dir $filename | egrep -o [0-9]+
输出为:045 46 47
在比较大于$ = 45且所有文件名为:
之后,我希望输出为文件名46kkkk.sql
47asdf.sql
需要正则表达式的帮助来比较文件名中的大于值。
答案 0 :(得分:0)
你可以试试这个:
DIR="C:\scripts"
MAX=45
for FILE in "$DIR"/*
do
if
[[ "$FILE" =~ ^([0-9]+) ]]
then
NUMBER="${BASH_REMATCH[1]}"
if
[ "$NUMBER" -gt "$MAX" ]
then
echo "$FILE"
fi
fi
done
请注意我没有测试过此代码。它是特定于bash的,并假设数字始终位于文件名的开头。
答案 1 :(得分:0)
#!/bin/bash
dir="$1"
print_if_greater="45"
for fname in "$dir"/[0-9]*; do
num="${fname##*/}" # isolate filename from path
num="${num%%[^0-9]*}" # extract leading digits from filename
if (( num > print_if_greater )); then
printf '%s\n' "$fname"
fi
done
上面的脚本将遍历给定目录中以至少一个数字开头的所有文件。
从路径中删除文件名,并使用bash
的变量扩展语法提取文件名中的初始数字。
如果提取的数字大于$print_if_greater
,则标准输出上会显示完整路径名。
使用您要检查的目录调用此脚本:
$ ./thescript.sh 'C:\scripts'
或
$ bash ./thescript.sh 'C:\scripts'
我无法访问Cygwin,因此我无法使用Window风格的路径进行测试。如果上述方法无效,请尝试使用C:/scripts
作为路径。