Я полагаю, что эта программа сделает то, что Вы хотите. Я протестировал его, и это работает над несколькими интересными случаями (такими как никакое расширение вообще):
#!/bin/bash
for fname in *; do
name="${fname%\.*}"
extension="${fname#$name}"
newname="${name//./_}"
newfname="$newname""$extension"
if [ "$fname" != "$newfname" ]; then
echo mv "$fname" "$newfname"
#mv "$fname" "$newfname"
fi
done
Основной вопрос, который Вы имели, был то, что ##
расширение не делало то, что Вы хотели. Я всегда полагал, что расширение параметра оболочки в ударе что-то вроде черной магии. Объяснения в руководстве не являются абсолютно четкими, и они испытывают недостаток в любых примерах поддержки того, как расширение, как предполагается, работает. Они являются также довольно загадочными.
Лично, я записал бы маленький сценарий в sed
это играло имя путем, я хотел, или записанный маленький сценарий в perl
это просто сделало все это. Один из других людей, которые ответили, проявил тот подход.
Еще одной вещью, на которую я хотел бы указать, является мое использование заключения в кавычки. Каждый раз, когда я делаю что-либо со сценариями оболочки, я напоминаю людям быть очень осторожными с их заключением в кавычки. Огромный источник проблем в сценариях оболочки является вещами интерпретации оболочки, он, как не предполагается. И правила заключения в кавычки совсем не очевидны. Я полагаю, что этот сценарий оболочки свободен от заключения в кавычки проблем.
Поэтому инструмент GUI (я думаю, что это baobab
) не принимает во внимание различные разделы, это только смотрит на дерево каталогов. Это означает, что видит /home
как подкаталог /
но не полагает, что это - отдельный раздел.
Если Вы смотрите на Ваш df
вывод:
/dev/sda5 38G 23G 14G 64% /<br>
/dev/sda7 146G 48G 91G 35% /home
Вы имеете 23G используемый в /
и 48G используемый в /home
. 48+23=71 так baobab
сообщает 71G используемый в /
.