Это два отдельных вопроса.
Очевидно, что RMS собирается одобрить адаптацию ноутбука с BIOS, которая является бесплатным программным обеспечением и не имеет закрытых -исходных кодов . Так что отвечает на это.
Первый вопрос заключается в том, почему люди могут и работают над coreboot (, который принимает некоторые блобы ), а затем libreboot, в первую очередь на этих старых моделях Thinkpad.
AUIU, основная серия Thinkpad, возможно, является ноутбуком премиум-класса. За исключением игрового оборудования. И не говоря уже о компьютерах Mac, которые представляют собой тяжелую битву за поддержку чего-либо стороннего -производителя из-за большого объема пользовательской работы. Они прочно сложены (и обычно долговечны ). Серия X -была удобно небольшой до появления «ультрабуков» для бизнеса (в тонком форм-факторе в стиле Mac Air ).
По какой-то причине они остановились на премиальных чипах Intel, а не на конкурентах. И возвращаясь, по крайней мере, к первой презентации Мэтью Гаррета на эту тему, если вы хотите, чтобы Linux работал на вашем ноутбуке, ищите Intel — это хорошее практическое правило. В частности для Wi-Fi. Intel пишет восходящие драйверы.
(Совсем недавно проект Dell Sputnik сделал их более привлекательными для некоторых пользователей Linux. Dell также предлагает беспроводную связь Intel в качестве опции ).
Недорогие потребительские ноутбуки также имеют множество моделей. Если вы хотите взломать прошивку, вам нужна одна популярная модель, над которой вы сможете работать.
Наконец, -обратите внимание, что это модели X60 и X200, старые . Коммерческие продукты libreboot представляют собой «восстановленные», бывшие в употреблении -машины. Thinkpads популярны в бизнесе, они служат долго, а потом их продают. (Libiquity заявляют о некоторых новых частях, но не уточняя, какие именно,мы также можем предположить, что они имеют в виду наклейки ). Итак, у нас есть популярная модель, которая существовала достаточно долго, чтобы люди могли решить проблему блоба, и которая все еще доступна для использования, окупая первоначальные инвестиции.
Это вопрос выбора правильного регулярного выражения для соответствия заменяемой строке.
Вы пометили вопрос тегом sed.
В sed
с синтаксисом ERE (, чтобы избежать нескольких\
):
s#(chunk_)0+([0-9]+\.)#\1\2#
Это заменит текстchunk_
(и зафиксирует его как первую обратную ссылку \1
), за которой следует любое количество (хотя бы один )из (ведущих )нулей 0+
, за которыми следует любое количество числа (по крайней мере один ), за которым следует точка \.
и преобразовать то, что было сопоставлено с обратными ссылками \1\2
(, удалив несколько ведущих нулей ).
Со старым, но более переносимым синтаксисом это:
s#\(chunk_\)0\{1,\}\([0-9]\{1,\}\.\)#\1\2#
Это преобразит:
for file in./BRNSPC_varID_chunk*.txt; do
filenew=$(echo "$file" | sed -E 's#(chunk_)0+([0-9]+\.)#\1\2#')
echo mv -n "$file" "$filenew"
done
Использование sed имеет смысл только в оболочках, не поддерживающих регулярные выражения.
В bash можно сделать:
regex='(.*chunk_)0+([0-9]+\..*)'
for file in./BRNSPC_varID_chunk*.txt; do
if [[ $file =~ $regex ]]; then
filenew=$(IFS=;printf '%s' "${BASH_REMATCH[@]:1}")
echo mv -n "$file" "$filenew"
fi
done
Это напечатает этот тип списка:
mv -n./BRNSPC_varID_chunk_000000.txt./BRNSPC_varID_chunk_0.txt
mv -n./BRNSPC_varID_chunk_0000.txt ./BRNSPC_varID_chunk_0.txt
mv -n./BRNSPC_varID_chunk_00011.txt ./BRNSPC_varID_chunk_11.txt
mv -n./BRNSPC_varID_chunk_000.txt ./BRNSPC_varID_chunk_0.txt
mv -n./BRNSPC_varID_chunk_00.txt ./BRNSPC_varID_chunk_0.txt
mv -n./BRNSPC_varID_chunk_010.txt ./BRNSPC_varID_chunk_10.txt
mv -n./BRNSPC_varID_chunk_011.txt ./BRNSPC_varID_chunk_11.txt
mv -n./BRNSPC_varID_chunk_012.txt ./BRNSPC_varID_chunk_12.txt
mv -n./BRNSPC_varID_chunk_013.txt ./BRNSPC_varID_chunk_13.txt
mv -n./BRNSPC_varID_chunk_014.txt ./BRNSPC_varID_chunk_14.txt
mv -n./BRNSPC_varID_chunk_015.txt ./BRNSPC_varID_chunk_15.txt
mv -n./BRNSPC_varID_chunk_01.txt ./BRNSPC_varID_chunk_1.txt
mv -n./BRNSPC_varID_chunk_02.txt ./BRNSPC_varID_chunk_2.txt
mv -n./BRNSPC_varID_chunk_03.txt ./BRNSPC_varID_chunk_3.txt
mv -n./BRNSPC_varID_chunk_04.txt ./BRNSPC_varID_chunk_4.txt
mv -n./BRNSPC_varID_chunk_05.txt ./BRNSPC_varID_chunk_5.txt
mv -n./BRNSPC_varID_chunk_06.txt ./BRNSPC_varID_chunk_6.txt
mv -n./BRNSPC_varID_chunk_07.txt ./BRNSPC_varID_chunk_7.txt
mv -n./BRNSPC_varID_chunk_08.txt ./BRNSPC_varID_chunk_8.txt
mv -n./BRNSPC_varID_chunk_09.txt ./BRNSPC_varID_chunk_9.txt
mv -n./BRNSPC_varID_chunk_0.txt ./BRNSPC_varID_chunk_0.txt
Обратите внимание, что он корректно работает с несколькими нулями.
Использованиеrename
:
rename 's/(BRNSPC_varID_chunk_)0([0-9])/$1$2/' *.txt
*.txt
расширится до всех .txt
файлов в текущем каталоге.
rename будет искать любой файл, содержащий BRNSPC_varID_chunk_0[0-9]
Если первая группа совпадений — BRNSPC_varID_chunk_
, а вторая группа совпадений — конечная [0-9]
, она заменит это только первой и второй группой совпадений (, исключая ноль посередине ).
Дано
$ touch BRNSPC_varID_chunk_07.txt BRNSPC_varID_chunk_00.txt BRNSPC_varID_chunk_70.txt
затем хотя бы в bash
, ksh
,zsh
$ for f in./*chunk_0?.txt; do echo mv "$f" "${f/chunk_0/chunk_}"; done
mv./BRNSPC_varID_chunk_00.txt./BRNSPC_varID_chunk_0.txt
mv./BRNSPC_varID_chunk_07.txt./BRNSPC_varID_chunk_7.txt
Удалите echo
, как только вы убедитесь, что он работает правильно.
Вы можете удалить префикс chunk
, если нет двусмысленности (, т. е. если последовательность _0
не может встречаться в другом месте в имени ).
Существует множество других менее переносимых решений с rename
, mmv
и т. д., например, с использованием rename
из util-linux
:
rename.ul -n -v chunk_0 chunk_./*chunk_0?.txt
(удалите -n
, чтобы фактически переименовать ).