基于正则表达式在 Linux 中查找文件,有多种替代方案

基于正则表达式在 Linux 中查找文件,有多种替代方案

假设我有一个字符串列表。我想查找文件名以这些字符串开头的文件。

例子,

字符串:filename.could.start.with.this.restoffilename a.file.could.have.this.at.beginning.restoffilename

这个字符串列表可以是任意数字(显然远大于上面的两个)。

我想为此使用 bash 脚本,并且只使用我认为的基本 linux 应用程序(ls、grep、sed、find 等),所以不使用 python、perl、ruby 或其他此类语言。

答案1

prefixes=("filename.could.start.with.this" "a.file.could.have.this.at.beginning")

# Turn the prefix array into a find expression (in array form)
matchlist=()
for prefix in "${prefixes[@]}"; do
    matchlist+=("-o" "-name" "$prefix*")
done
matchlist=("${matchlist[@]:1}") # remove the extra "-o" from the beginning

# Search the current directory for plain files with names starting with one of the prefixes
find -x . "(" "${matchlist[@]}" ")" -type f

如果您的文件名前缀列表不是数组形式,则必须进行适当修改,例如

prefixes="filename.could.start.with.this a.file.could.have.this.at.beginning"

...
for prefix in $prefixes; do
...

此外,如果给定一个空的文件名前缀列表,这将不会表现良好;如果有可能,请先检查这种情况。

答案2

相关内容