Переименование файлов в дереве с расширением, включенным в базовое имя

Я получил эту ошибку с моим Nexus 10. Я попробовал все ответы, которые мог найти, а затем понял, что использую другой порт USB, чем обычно. Я перешел на использование порта, который я обычно использую, который находится на другой стороне моего ноутбука, и авторизация появилась на моем планшете!

1
задан Dan Berlyoung 16 January 2019 в 19:34
поделиться

2 ответа

Вы должны правильно выйти из своего регулярного выражения и использовать \1.\2 вместо

s/\([0-9]\{5\}\)\(.*\)/\1.\2/

Например:

$ echo '12345jpg' | sed 's/\([0-9]\{5\}\)\(.*\)/\1.\2/'
12345.jpg
0
ответ дан mrzasa 16 January 2019 в 19:34
поделиться

Я не думаю, что утилита 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 в качестве безопасности. Это будет интерактивно спрашивать обо всем, что вы перезаписали, прежде чем сделать это.

0
ответ дан Adam Katz 16 January 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: