Да, это возможный. Поместите такой код в файл, скажем fix-dashes.sh (у меня Mac OS, но это должно работать и в других Unix):
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
trap 'IFS=$SAVEIFS' 0
for i in $@
do
echo Processing $i
case $i in
*-*)
echo "'$i' has a dash"
destname=$(echo "$i" | sed 's/ -.*//')
echo mv "$i" $destname
mv "$i" $destname
;;
esac
done
Затем bash fix-dash.sh * /
переименует каталоги, как вы указали. Косая черта важна, чтобы вы получали только имена каталогов, иначе будут затронуты обычные файлы с дефисами.
`IFS содержит разделители для слов, и поскольку в именах ваших файлов есть пробелы, вам необходимо изменить их.
Мне нравится использовать ограниченный механизм регулярного выражения case
, потому что он имитирует RE, используемые bash
в командной строке. В этом случае переименование будет выполнено только при именах, содержащих дефис.
Команда sed
выполняет преобразование, в данном случае заменяя все после первого пустой строкой.
Я решил эту проблему, просто перемонтировав rootfs read -write(mount -o remount,rw /
)и сохранив случайно сгенерированный ID машины в файл /etc/machine-id
.
Вероятно, самый простой и лучший вариант — передать его как переменную командной строки ядраsystemd.machine_id
в соответствии с официальной документацией . Если вы хотите получить что-то особенное, вы можете настроить загрузчик на основе чего-то действительно уникального в SoC, на котором вы работаете (, например, серийного номера, MAC-адреса и т. д. ).