У меня есть папка, которая содержит много файлов с одинаковой структурой:
file.number1.2010.720p.otherinfo.mp4
file.number2.1990.720p.otherinfo.mp4
....
Я хотел бы удалить всю последовательность:
YEAR.720p.otherinfo
Поэтому имя будет:
file.number1.mp4
file.number2.mp4
....
И, наконец, я хотел бы удалить все точки (.), Кроме точки в конце (.mp4)
Какие команды мне следует использовать для создания такого сценария?
Это сделает задание:
Во-первых: установка rename
путем выполнения следующей команды в терминале:
sudo apt install rename
Во-вторых: В терминале,cd
к каталогу, содержащему Ваши файлы.
Наконец: Переименуйте файлы к своему нужному формату путем выполнения следующей команды в терминале:
rename 's/^(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.mp4$/$1$2.mp4/' *
Готово
Уведомление:
Видеть как rename
команда будет воздействовать на Ваши файлы, но действительно не переименовывая их (просто печатают вывод к терминалу), можно добавить опцию -n
после него. Как так:
rename -n 's/^(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.mp4$/$1$2.mp4/' *
Объяснение - согласно просьбе Hamza:
Часть № 1:
's/ORIGINAL/NEW/'
Замены ORIGINAL
строка с NEW
строка.
Чтобы видеть, как это работает простым, поскольку это добирается:
rename -n 's/file.number1.2010.720p.otherinfo.mp4/NEW.mp4/' *
file.number1.2010.720p.otherinfo.mp4
в текущем каталоге. rename(file.number1.2010.720p.otherinfo.mp4, NEW.mp4)
Часть № 2:
^(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.mp4$
Запускается в начале строки ^
и затем соответствия один или несколько character/s (любой символ) (.+)
перед точкой \.
Эта группа помещается в переменную $1
и повторенный еще четыре раза (пять всего) каждая группа помещается в переменную ( $2
, $3
, $4
, $5
) до .mp4
представленный как \.mp4
достигнут.
Удостоверяется строковые концы с .mp4
при помощи $
символ, который соответствует концу строки.
Эта часть, однако, немного гибка и даст Вам нежелательные результаты, если именование файла непоследовательно, и у Вас есть файлы больше чем с пятью частями, разделенными точками на их имена как file.number1.2010.720p.otherinfo.extrainfo.mp4
Если это верно, займите место, это расстается с более строгим регулярным выражением ниже. Таким образом, это будет только воздействовать на файлы с пятью частями, разделенными точками на их имена только:
^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.mp4$
Часть № 3:
$1$2.mp4
Определяет новое имя файла как, что находится под переменной для первой группы $1
(в этом случае file
) +, что находится под переменной для второй группы $2
(в этом случае number(x)
) + .mp4
Часть № 4:
*
Воздействует на все файлы в текущем каталоге.
Можно использовать cut
и bash
обработка строк:
Первый подход: только с cut
:
for I in .*mp4
do
echo mv "$I" "$(echo $I | cut -d. -f 1,2,6)"
done
Объяснение:
for...
выберет все .mp4
файлыecho $I |
преобразует I
переменная во вход для следующей программыcut -d. -f 1,2,6
выберет поля 1, 2 и 6, где поля разделяются .
Но этот подход может быть проблематичным с тех пор, 6-е поле может быть не расширением.
Таким образом, у Вас может быть второй путь:
for I in .*mp4
do
echo mv "$I" "$(echo $I | cut -d. -f 1,2).mp4"
done
С той командой Вы вынуждаете расширение быть .mp4
. Это будет работать, но что, если Вы не будете иметь только mp4
файлы с тем же шаблоном именования?
В этом случае можно использовать дополнительный выбор:
for I in *mp4 *avi
do
echo mv "$I" "$(echo $I | cut -d. -f 1,2).${I##*.}"
done
${I##*.}
позволит Вам выбирать то, что находится позади последнего .
в переменной I
Примечание: для предотвращения плохого поведения добавил я echo
в командах для наблюдения то, что они сделают прежде, чем выполнить их действительно.
Я всегда использую Thunar (filemanager) для этого, просто открывают его, выбирают файлы, которые Вы хотите изменить (сокращайте/вставляйте/корректируйте/заменяйте символы), и затем щелкните правой кнопкой->, переименовывают
Вы получаете сложное меню с большим количеством опций и способов изменить Ваши имена файлов и их расширения, и видеть их предварительные просмотры в правильной панели.