Bash脚本将目录文件读入Array

时间:2013-03-23 00:24:27

标签: bash

我无法在bash中将文件读入数组。

我注意到人们不建议使用ls -1选项。 有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:16)

获取文件列表的最可靠方法是使用shell通配符:

# First set bash option to avoid
# unmatched patterns expand as result values
shopt -s nullglob
# Then store matching file names into array
filearray=( * )

如果您需要将文件放在当前目录以外的其他位置,请使用:

filearray=( "$dir"/* )

请注意,目录路径应该是双引号,以防它包含空格或其他特殊字符,但*不能或不会扩展到文件列表中。此外,这会为数组填充文件的路径,而不仅仅是名称(例如,如果$dir是“path / to / directory”,则filearray将包含“path / to / directory / file1”,“path /”到/ directory / file2“等)。如果只需要文件名,可以使用以下方法修剪路径前缀:

filearray=( "$dir"/* )
filearray=( "${filearray[@]##*/}" )

如果你需要在子目录中包含文件,事情会变得复杂一些;见this previous answer