я делаю немного сценария оболочки, и я хочу снабдить все файлы тем же суффиксом в таблице.
я хочу что-то как этот:
path=/home/user/Documents
suffix="_suffix.txt"
и затем функция, которые создают имя таблицы файлы и заполняют его файлом в $path с суффиксом $suffix. результат:
echo files[0]
-> /home/user/Documents/project_suffix.txt
echo files[1]
-> /home/user/Documents/html_suffix.txt
echo files[2]
-> /home/user/Documents/jokes_suffix.txt. и т.д...
Я не хочу иметь в своем списке другие файлы как "budget.txt"
Спасибо за Ваши ответы!;)
Это довольно просто с последними версиями bash
при помощи globbing и массивов, который является тем, что я принимаю Вас, подразумевают под таблицами.
Сначала создайте некоторые тестовые файлы:
path=/some/where
touch $path/{a,b,c}_suffix.txt
Вот пример, который вставляет все окончание файлов _suffix.txt
в files
массив:
files=("$path"/*_suffix.txt)
Для итерации по ним, можно сделать что-то вроде этого:
for file in "${files[@]}"; do
echo "$file"
done
Или:
for i in ${!files[@]}; do
echo "${files[i]}"
done
Примечание, имена файлов с пробелами и новыми строками в них вызовут проблемы с этим подходом. В этом случае Вы лучше из с a find
и -print0
цикл, см. этот ответ для примера и эту рецензию для деталей.
Как отмечено muru, пробельная проблема не может быть столь проблематичной, как это раньше было, YMMV.
Что Вы называете, таблицу обычно называют массивом или картой. В ударе, для создания такого массива:
path="/home/user/Documents"
suffix="_suffix.txt"
files=( "$path"/*"$suffix" )
*
подстановочный знак, который расширен оболочкой до всех имен файлов соответствия (которые имеют $path
перед ним и $suffix
после). Скобки (()
) преобразуйте расширенные имена файлов в массив.
Затем можно получить доступ к каждому элементу (индексированный от 0, вместо 1) использование "${files[0]}"
, "${files[1]}"
, и т.д.
Например:
$ path=/tmp
$ suffix=_amd64.deb
$ files=( "$path"/*"$suffix" )
$ echo "${files[1]}" "${files[0]}"
/tmp/vim-athena_7.4.640-1~ppa1~t_amd64.deb /tmp/vim_7.4.640-1~ppa1~t_amd64.deb