假设我有一个字符串列表。我想查找文件名以这些字符串开头的文件。
例子,
字符串: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
BASH 常见问题解答条目 #50:“我尝试将命令放入变量中,但复杂的情况总是失败!”
只需继续向数组中添加find
谓词,直到获得命令为止。