Как снабдить все файлы тем же суффиксом в таблицу?

я делаю немного сценария оболочки, и я хочу снабдить все файлы тем же суффиксом в таблице.

я хочу что-то как этот:

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"

Спасибо за Ваши ответы!;)

3
задан 26 February 2015 в 20:45

2 ответа

Это довольно просто с последними версиями 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.

4
ответ дан 1 December 2019 в 15:25

Что Вы называете, таблицу обычно называют массивом или картой. В ударе, для создания такого массива:

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
2
ответ дан 1 December 2019 в 15:25

Другие вопросы по тегам:

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