如何在bash中将目录中的特定文件放入数组中?

如何在bash中将目录中的特定文件放入数组中?

假设我有一个目录,下面有3个文件,名为:file1.txt、file2.txt和file3.txt。

现在我怎样才能用这些文件名填充一个数组(我只知道所有文件都有一定的前缀,即文件,文件之后可以是1、2、3等。

答案1

来自 Greg 的 Wiki:Bash 指南数组上的条目:

files=()
while read -r -d $'\0'; do
    files+=("$REPLY")
done < <(find *.txt -print0)

页面上有对数组的详细解释,逐个元素地分解了这个结构;值得全文阅读。

答案2

如果文件都在同一目录中,除了 jasonwryan 的答案之外,您还有其他一些选择。

使用全局:

files=(file[0-9].txt)

仅匹配问题中的示例文件:

files=(file[1-3].txt)

如果您有 bash 版本 4 或更高版本,您甚至可以递归地进行 glob 操作:

shopt -s globstar
files=(**/file[0-9].txt)

使用大括号扩展将数组限制为仅包含示例文件:

files=(file{1..3}.txt)

与其他两个示例不同,这将使用文件名填充数组,即使它们不存在。因此,支架扩展可能并不理想。

相关内容