Переименование нескольких файлов с двумя последовательными точками в имени

Проблема возникает из-за egrep -w 'ошибка | исключение' . Эта команда добавляет специальные символы до и после шаблона (например, ошибки или исключения) для выделения этих шаблонов в результате grep.

Это так, как упомянул Харальд. Шаблон 'ERROR' не соответствовал оператору вывода grep, поскольку в 'ERROR' между тегами STATUS в выводе grep были добавлены некоторые специальные символы с помощью флага -w .

Следовательно, когда результат egrep был отправлен в команду grep -v , он не соответствовал шаблону.

0
07.03.2018, 18:54
1 ответ

Точка соответствует любому символу, поэтому двойная точка соответствует первым двум символам в именах файлов, поэтому они заменяются тире на rename. Либо экранируйте каждую точку в регулярном выражении как \., либо используйте цикл (, это написано дляbash):

for name in./*..*; do
    newname=${name/../-}
    printf 'Would move %s to %s\n' "$name" "$newname"
    # mv -i "$name" "$newname"
done

Запустите один раз и убедитесь, что он выводит правильные данные, прежде чем удалить #и запустить снова.

Цикл будет перебирать все имена в текущем каталоге, которые содержат две точки подряд. Подстановка параметра ${name/../-}заменит первое вхождение двух последовательных точек на тире. Это шаблон подстановки имени файла оболочки, поэтому точка никоим образом не является особенной.

0
28.01.2020, 02:32

Теги

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