#linux #bash #echo #wildcard
Вопрос:
Я пытаюсь добавить «aaa» в файлы «ami» без указания полного пути
Я попробовал это:
echo "aaa" >> /home/thomas/*-bbb-*/ami
вместо того, чтобы вводить каждый путь отдельно, например /home/thomas/1-bbb-2/ami и /home/thomas/1-bbb-3/ami и так далее
Или я должен каким-то образом рекурсивно искать все файлы с именем «ami» в /home/thomas/ и добавлять их в переменную, а затем добавлять все эти файлы в эту переменную?
Комментарии:
1. Сколько у вас файлов? Ваш путь отличается только цифрами: 1-ввв-1, 1-ввв-2, 1-ввв-3 и т.д.?
2. Всего до 150 файлов. Я просто хочу сделать это более разумным способом, чем вводить каждый путь
3. Однако вы можете ударить, а можете и не ударить
ARGMAX
, сделав это.4.
files=(/home/thomas/[0-9]*-bbb-[0-9]*/ami); for f in "${files[@]}"; do echo 'aaa' >> "$f"; done
Возможно, потребуется включитьshopt -s nullglob
Ответ №1:
Попробуйте использовать цикл:
for i in `seq 150` #change 150 to your value
do
echo "aaa" > /home/thomas/1-bbb-$i/ami
done
Это сработает, если ваши пути изменятся в одном месте (как в вашем примере).
Комментарии:
1. Путь меняется в 2 местах: /home/thomas/*-bbb-*/ami В противном случае ваше предложение сработает. Есть ли способ добавить файлы в переменную, а затем просто работать с ними? Потому что это не всегда будет 150 файлов, и на вашем пути будут ошибки, потому что он всегда будет искать ровно 150. Спасибо
Ответ №2:
Сохраните имена файлов в массиве.
files=(/home/thomas/[0-9]*-bbb-[0-9]*/ami)
for f in "${files[@]}"; do echo 'aaa' >> "$f"; done