Массовое переименование файла

Сообщение

Hunk #4 FAILED at 1013.

отражается в отклонении, которое показывает номера строк, которые он пытался исправить. Этот фрагмент может применяться в текущей версии к строке 1006 из x.c, за исключением того, что он был сбит с толку пустой строкой :

.
        XColor xmousefg, xmousebg;

        if (!(xw.dpy = XOpenDisplay(NULL)))

или, показывая номера строк (текстовый редактор):

   1000 xinit(int cols, int rows)
   1001 {
   1002         XGCValues gcvalues;
   1003         Cursor cursor;
   1004         Window parent;
   1005         pid_t thispid = getpid();
   1006         XColor xmousefg, xmousebg;
   1007
   1008         if (!(xw.dpy = XOpenDisplay(NULL)))
   1009                 die("can't open display\n");
   1010         xw.scr = XDefaultScreen(xw.dpy);
   1011         xw.vis = XDefaultVisual(xw.dpy, xw.scr);

Отклонение " -" в первом столбце указывает на то, что он пытался удалить строки. Вы можете просто отредактировать их, предполагая, что другие изменения в файле были правильными (, т. е. эта инициализация может быть избыточной, а может и нет, в зависимости от даты -до -файла исправления )..

0
27.12.2020, 18:52
2 ответа

Сzsh:

autoload zmv
zmv -n '(*.s<->e<->).*(.mp4)' '$1$2'

Снимите-n(сухой -прогон )при удовлетворительном состоянии.

2
18.03.2021, 22:40

Если у вас есть доступ к perl-rename(, называемому renameв некоторых дистрибутивах Linux, prenameв других и perl-renameв третьих ), вы можете выполнить:

$ rename -n 's/(.+?\..+?\.).*\.(.*)/$1$2/s' *mp4
myvideo.s01e01.episode.title.here.mp4 -> myvideo.s01e01.mp4
myvideo.s01e02.episode.title.here.mp4 -> myvideo.s01e02.mp4

Это просто напечатает то, что должна сделать команда, фактически ничего не переименовывая. Если вывод соответствует вашим ожиданиям, запустите команду без -n, чтобы фактически переименовать файлы.

Если у вас нет perl-renameи имена файлов не содержат символов новой строки и все их байты составляют допустимые символы в локали пользователя, вы также можете сделать это непосредственно в оболочке (здесь, предполагаяzsh-подобная оболочка и BSD -совместимая sedреализация):

for f in *mp4; do 
    newName=$(sed -E 's/(([^.]*\.){2}).*\.([^.]*)$/\1\3/' <<<"$f"); 
    echo mv -- "$f" "$newName"; 
done

Если это выглядит правильно, запустите снова без echo.

2
18.03.2021, 22:40

Теги

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