Я столкнулся с той же проблемой. Поскольку ранее был установлен virtualbox
из репозиториев Mint по умолчанию, я попытался установить текущий выпуск непосредственно из https://www.virtualbox.org/
.
Таким образом, я снова смог запускать виртуальные машины.
rename 's/\?//g' *
кто бы переименовал все файлы
francois@zaphod:~/tmp$ ls
toto_?_ toto_?_1 toto_?_2
francois@zaphod:~/tmp$ rename 's/\?//g' *
francois@zaphod:~/tmp$ ls
toto__ toto__1 toto__2
francois@zaphod:~/tmp$
Предполагая bash
или любую подобную оболочку, которая знает, как заменить все вхождения строки, соответствующей шаблону в значении переменной, на ${variable//pattern/replacement}
(, например. zsh
илиksh
):
for name in./*'?'*; do
mv -i "$name" "${name//'?'/}"
done
Это короткий цикл, в котором перебираются все имена в текущем каталоге, содержащие хотя бы одно?
(скрытое имя ). Для каждого такого имени символы ?
удаляются из имени файла, и результат используется в качестве нового имени файла.
Одинарные кавычки вокруг ?
в шаблонах не позволяют рассматривать его как специальный символ подстановки, который соответствует любому одиночному символу (, что и делает ?
без кавычек ). Вы также могли бы использовать \?
или [?]
.
Если знаки вопроса, которые вы видите, взяты из вывода ls
, то они могут представлять собой непечатаемые -символы.
Чтобы удалить эти , замените каждый '?'
в приведенном выше коде на [![:print:]]
. Подстановочный шаблон [![:print:]]
соответствует непечатаемому символу. Класс символов [:print:]
похож на [:graph:]
,но первое соответствует символу пробела, а второе — нет. Следовательно, использование [![:print:]]
приведет к удалению пробелов , а не , а использование [![:graph:]]
удалит пробелы.