2016-11-08 1 views
0

Я пытаюсь написать сценарий, который будет загружать все имена файлов с помощью путей в массив в сценарии bash.Bash Script для загрузки всех файлов в каталог/подкаталоги в массив

Скажите, что я хочу, чтобы все папки и файлы вложенных папок в/home/documents/он дал мне массив файлов в конце.

Мой текущий сценарий очень простой, но должен иметь некоторые функции.

num_partitions=0 
for file in /home/documents/*; do 
    date_partition[$num_partitions]=${file##*/} 
    ((num_partitions++)) 
    echo ${date_partition} 
done 

В настоящее время он печатает только черный экран. Как я могу исправить это, чтобы получить нужные мне функциональные возможности и правильно распечатать их?

Я новичок в Bash, это на самом деле мой первый сценарий. Пожалуйста помоги.

ответ

1

Во-первых, как правило, вы не хотите, чтобы разобрать вывод логинсервера ... http://mywiki.wooledge.org/ParsingLs

Далее логика вашего подхода не является неправильным. Существует более простой метод, который мы можем использовать для выполнения этой задачи!

ar=($(find /home/documents/*)); echo "${#ar[@]}"; echo "${ar[2]}" 

Нарушение этого у нас есть.

$(find /home/documents/*) 

Это замена команды. Он фиксирует вывод команды, которая написана внутри него. С этим вы можете сделать что-то вроде output=$(find .), а теперь вывести переменную, содержащую результаты команды find.

Далее мы имеем

ar=() 

() Создает массив. Ввод этого массива теперь будет результатом команды find. Поэтому, когда мы их объединяем, мы заканчиваем тем, что «создаем массив из вывода этой команды find».

Остальная часть команды просто показывает, что ar на самом деле представляет собой массив. Мы печатаем длину массива, а затем значение в индексе 2.

Предлагаемый Googling будет ... заменой команды в bash. Создание массива из команды в bash. Как использовать массивы в bash.

ПРИМЕЧАНИЕ. Поймите, что команда в пределах $() может включать | в другие команды, такие как find . | tr -d "." | ./some_other_command. Также я предлагаю прочитать справочную страницу поиска с "." и ".." могут появиться в вашем массиве, как это написано сейчас.

+1

Еще проще: 'arr = (/ home/documents/*)' - это расширит шаблон имени файла в массиве. Это безопаснее, чем '$ (find ...)' в случае имен файлов, содержащих пробельные символы. –

+0

Хорошая точка. Я очень привык к тому, что вам не нужно иметь дело с файлами, в которых есть пробелы. Однако остается точка зрения, что нет смысла использовать дополнительный инструмент, если он не нужен. –

 Смежные вопросы

  • Нет связанных вопросов^_^