Элементы ссылки в цикле bash for из команды find

Да, так оно и есть. Не идеально, но функционально. Пожалуйста, отправьте отчет об ошибке в Launchpad, чтобы исправить это.

После перезапуска _позиционировать _итератор в двойственности:

Fake writing to backend, but do go through all the source paths.
Stop when we have processed the last file and block from the
last backup.  Normal backup will proceed at the start of the
next volume in the set.

0
09.03.2020, 16:29
1 ответ

Ваша команда

$(find * -type f -name "*.txt")

вернет (пробел -разделенный )список bash, а не массив, поэтому вы не можете получить доступ к отдельным элементам «целевым» способом.

Чтобы преобразовать его в массив bash, используйте

filearray=( $(find * -type f -name "*.txt") )

(обратите внимание на пробелы!)

Затем вы можете получить доступ к отдельным записям, как в

for ((i=0; i<n; i++))
do
   file="${filarray[$i]}"
   <whatever operation on the file>
done

, где количество записей можно получить с помощью

n="${#filearray[@]}"

Обратите внимание, однако , что это работает только , если ваши имена файлов -не содержат специальных символов (в определенном пространстве )и, следовательно, еще раз, синтаксический анализ вывод lsили findне рекомендуется . В вашем случае я бы рекомендовал посмотреть, может ли вариант -execиз findсделать то, что вам нужно.

2
28.04.2021, 23:21

Теги

Похожие вопросы