Я хочу запустить ls
, чтобы получить список файлов, а затем прочитать результат в массив, где каждый элемент соответствует имени файла. Это возможно?Чтение имен файлов в массив
ответ
Не используйте ls
, это не предназначенные для этой цели. Используйте globbing.
shopt -s nullglob
array=(*)
array2=(file*)
array3=(dir/*)
nullglob
опция заставляет массив не быть пустым, если там нет совпадают.
Спасибо, я все равно могу передать результаты? Я пробовал что-то вроде arr (* | grep ".txt"), но ему это не нравится. – dublintech
@dublintech: вам не нужно 'grep', просто введите строку в свой glob:' array = (*. Txt) 'или' array = (* foo *) ' –
Спасибо Denis. Это сработало. – dublintech
После создаст массив обр с выходом LS в текущем каталоге:
arr=($(ls))
Гораздо лучше и безопаснее, чем ls
вы можете использовать echo *
:
arr=(*)
echo ${#arr[@]} # will echo number of elements in array
echo "${arr[@]}" # will dump all elements of the array
'ls' не требуется и не должен использоваться для этой цели. –
Согласен, я просто хотел рассказать, как создать массив из некоторого выходного файла команды. Однако я отредактировал свой ответ, чтобы подчеркнуть, что выход 'ls' следует избегать. – anubhava
Когда расширение массива не цитируется, все элементы массива представлены как строка, а не отдельные элементы массива. Необязательные '$ {arr [*]}' и '$ {arr [@]}' совпадают. – jordanm
Фактически, ls
- это не путь. Попробуйте это:
declare -a FILELIST
for f in *; do
#FILELIST[length_of_FILELIST + 1]=filename
FILELIST[${#FILELIST[@]}+1]=$(echo "$f");
done
Чтобы получить имена из массива:
echo ${FILELIST[x]
-или-
echo ${FILELIST[@]:x:y}
где х & у являются первым элементом, чтобы получить и сколько элементов после что.
Для большой учебник по Баш массивов, см: http://www.thegeekstuff.com/2010/06/bash-array-tutorial/
Вы должны перебирать файл glob * OR * создавать массив, используя файл glob, как в моем ответе - не * both * !. При добавлении элементов в массив нет причин использовать длину массива в сложном выражении индекса (он не будет работать так, как ожидалось, если массив разрежен, с одной стороны). 'Массив + = (элемент)'. Нет смысла использовать '$ (echo" $ f ")' просто выполнить назначение напрямую.На одном из ваших высказываний 'echo' есть отсутствующая фигурная фигурная скобка. –
Попробуйте это,
PATH="" # could set to any absolute path
declare -a ARRAY=(${PATH}/*)
Я предполагаю, что вы будете вытаскивать ненужные вещи из списка ниже.
- 1. iMacro Чтение имен файлов
- 2. Чтение имен файлов, соответственно?
- 3. Чтение имен файлов в Excel
- 4. Чтение имен файлов с клавиатуры
- 5. Чтение имен файлов вместо данных внутри файлов
- 6. Java - чтение файлов в массив
- 7. Чтение файлов в массив python
- 8. Чтение файлов столбцов в массив
- 9. Чтение имен файлов из файла в Python
- 10. Чтение имен файлов из каталога в Bash
- 11. Java 8, преобразовать массив имен файлов в массив файлов
- 12. Баша, список имен файлов, массив
- 13. Чтение текстовых файлов в массив в C
- 14. Чтение имен музыкальных файлов с помощью C++
- 15. чтение новейших имен файлов с помощью find
- 16. C# чтение и изменение имен файлов Excel
- 17. Чтение имен файлов с помощью C++
- 18. Чтение недопустимых имен файлов из папки
- 19. чтение динамически созданных имен файлов cookie
- 20. Чтение имен файлов изображений из пролетов
- 21. массив имен файлов черный список в ruby
- 22. Массив NSStrings из имен файлов в папке?
- 23. Чтение текстовых файлов в 2D-массив?
- 24. Чтение 2 файлов в массив структур
- 25. Чтение файлов данных в массив ячеек символов
- 26. Чтение в подмножестве растров на основе имен файлов в R
- 27. Windows Batch Script - чтение имен файлов в переменные
- 28. Чтение файла параметров и копирование имен файлов в DSN
- 29. Чтение файлов в нескольких каталогах, сопоставление имен файлов с их данными с использованием Node и Promises
- 30. Поиск имен файлов в каталоге
Да, это возможно. Может быть, не рекомендуется, если имена могут содержать произвольные символы (пробелы и символы новой строки в именах вызывают горе), но это выполнимо. В какой части руководства вы столкнулись с трудностями? –