2017-02-19 24 views
-1

У меня есть задание, над которым я работаю, но у меня возникла проблема с его запуском. Ниже приведен какой-то текст задания, который может помочь гильдии мне в правильном направлении.Получите все файлы из каталога и поместите их в массив

Моя основная проблема - получить список файлов в массив. Я думаю, что если я смогу это сделать, остальное должно быть легко. Я могу передать файлы в массив, который передается как аргументы, но я не знаю, как получить все файлы из каталога, разбитые на каждый файл в массив.

Любая помощь была бы принята с благодарностью! комментарий

+1

Зачем вам нужны все файлы из каталога? Назначение не говорит об этом. – melpomene

+0

Возможно, у меня неправильное представление о том, что задает вопрос. Они интерпретируют это так, что он хочет занести в свой каталог и запустить сценарий для организации файлов в виде. эти типы будут обычным файлом, символической ссылкой, справочником или другим. Я должен делать другие команды на этом скрипте, но я не хочу много отдавать. Есть ли другой способ интерпретации этой задачи? может быть, что-то мне не хватает? –

+0

Ничего из того, что вы только что сказали, является частью задания, которое вы указали в своем вопросе. – melpomene

ответ

2

Благодаря Benjamin W в: Просто используйте files=(*)

Или, если вы хотите включить скрытые файлы и не хочет делать неприятности с пустыми папками, использовать это (благодаря комментарию Фреда):

shopt -s nullglob dotglob 
files=(*) 
+1

Не мой DV, но это громоздкий способ сказать 'files = (*)' –

+0

Вы правы, я отставлен ... – mfnalex

+1

Вы можете просто обновить ответ, нет? :) –

0
#!/bin/bash 

shopt -s nullglob 
arr=(/home/*) 

for ((i=0; i<${#arr[@]}; i++)); do 
    echo "${arr[$i]}" 
done 
+1

Без 'shopt -s dotglob' файлы с именами, начинающимися с точки, не будут приняты во внимание (что может быть или не быть тем, что требуется в любом конкретном случае). – Fred

+0

есть ... + 1 для дополнительного уточнения. вопрос не упоминал какой-то конкретный случай ... просто удалил все точечные файлы! –

0

Этот скрипт проверяет, было дано каких-либо параметров ((($# == 0))), а если нет, то я t использует set -- "$PWD", чтобы установить первый позиционный параметр в текущий каталог, ..

После этого for f (что является сокращением от for f in "[email protected]") охватывает все параметры обработки.

#!/bin/bash 

(($# == 0)) && set -- "$PWD" 
for f; do 
    # Do something with f 
done 
+0

Он говорит, что использовать '.', если не указаны параметры, а не все (не скрытые) файлы в текущем каталоге. – melpomene

+0

@melpomene Я интерпретировал это как «все в' .' »... как вы думаете, это должен быть только текущий рабочий каталог? –

+0

Да, потому что он конкретно относится к «объектам файловой системы» (который включает в себя каталоги и другие вещи), а не только файлы. – melpomene