У меня возникли проблемы с чтением файла в массив в bash.Bash Script Чтение файлов каталога в Array
Я заметил, что люди не рекомендуют использовать опцию ls -1. Есть ли способ обойти это?
У меня возникли проблемы с чтением файла в массив в bash.Bash Script Чтение файлов каталога в Array
Я заметил, что люди не рекомендуют использовать опцию ls -1. Есть ли способ обойти это?
Самый надежный способ получить список файлов с шаблона оболочки:
# 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 будет содержать «путь/в/каталог/файл1», «путь/в/каталог/file2 "и т. д.). Если вы хотите только имена файлов, вы можете обрезать путь префиксы с:
filearray=("$dir"/*)
filearray=("${filearray[@]##*/}")
Если вам необходимо включить файлы в подкаталогах, все становится немного сложнее; см. this previous answer.
Я нахожусь в каталог массива. Итак, первый файл ** filearray = (*) ** будет получать все файлы в массив с каждым файлом, имеющим свой собственный индекс? – 2013-03-23 00:51:38
@ sinful15: Да. BTW, обязательно поместите ссылки на имена файлов в двойных кавычках, как в '' $ {filearray [1]} "' только для одного файла или '' $ {filearray [@]} "' для полного списка. –
Удивительный ответ, помог тонне! – dardo
Можете ли вы пояснить немного больше о том, что вы пытаетесь сделать? Команда ls предназначена для перечисления каталога, а не для чтения файлов. – minism
Возможный дубликат [Чтение имен файлов в массив] (http://stackoverflow.com/questions/10981439/reading-filenames-into-an-array) – miken32