Я получил эту ошибку с моим Nexus 10. Я попробовал все ответы, которые мог найти, а затем понял, что использую другой порт USB, чем обычно. Я перешел на использование порта, который я обычно использую, который находится на другой стороне моего ноутбука, и авторизация появилась на моем планшете!
Вы должны правильно выйти из своего регулярного выражения и использовать \1.\2
вместо
s/\([0-9]\{5\}\)\(.*\)/\1.\2/
Например:
$ echo '12345jpg' | sed 's/\([0-9]\{5\}\)\(.*\)/\1.\2/'
12345.jpg
Я не думаю, что утилита rename
может обрабатывать обратные ссылки.
Вот портативное решение, предназначенное только для posix:
find . -type f -name '[0-9][0-9][0-9][0-9][0-9]?*' \
-not -name '*.*' |while IFS= read file; do
dir="${file%/*}"
file="${file#$dir/}"
B="${file#?????}"
A="${file%$B}"
mv -i "$dir/$file" "$dir/$A.$B"
done
Это использует глобблирование оболочки (в котором отсутствуют квантификаторы, следовательно, избыточность), чтобы гарантировать, что мы переименовываем только файлы, которые имеют ожидаемые пять начальных цифр, а затем по крайней мере, еще один символ, исключая файлы с точкой в именах.
Затем он перебирает строку за строкой (да, это будет прерываться, если в именах файлов есть разрыв строки - не делайте этого!). Я явно очищаю $IFS
, чтобы пробелы не интерпретировались как разделители полей.
В цикле while я массирую имя файла. Сначала я извлекаю имя каталога (которое равно ./
, если его нет; будьте осторожны, если вы отклоняетесь от find . …
), а затем изменяю переменную $file
, чтобы сохранить только имя файла. Затем я назначаю $B
имени файла, в котором отсутствуют первые пять символов (которые find
уже должны быть цифрами), а $A
- эти первые пять символов. Теперь мы можем сделать переименование с помощью дополнительной точки.
Я использовал mv -i
в качестве безопасности. Это будет интерактивно спрашивать обо всем, что вы перезаписали, прежде чем сделать это.