Предположим, у Вас есть список имен файлов с путями в file-list
файл, попробуйте следующее
while IFS= read -r path; do
newpath=$(printf '%s\n' "$path" |
sed 's/\(.*S[0-9]*E[0-9]*\.\).*\.\([^.]*\)$/\1\2/')
echo mv -- "$path" "$newpath"
done <file-list
Значение sed
используемое регулярное выражение, также по сравнению с примером вводится "The.Big.Bang.Theory.S01E01.xxxxxxxxxxx.mp4"
\( start of group 1
.* The.Big.Bang.Theory. any sequence of characters
S[0-9]* S01 a capital S followed by 0 or more digits
E[0-9]* E01 a capital E followed by 0 or more digits
\. . a dot
\) end of group 1
.* xxxxxxxxxxx any sequence of characters
\. . a dot
\( start of group 2
[^.]* mp4 a sequence of 0 or more non-dot characters
\) end of group 2
$ end of line
В выводе, строке \1\2
означает "вывод group1 сопровождаемый group2 (так для удаления xxxxxxxxxxx.
)
Удалите echo
если удовлетворено.
Человек Ubuntu pagea, кажется, не предлагает синтаксис
local0.* :omfile:$test_rotated
сайт, который Вы связали, советует - он говорит:
Keep in mind that $outchannel just defines a channel with "name". It
does not activate it. To do so, you must use a selector line (see
below). That selector line includes the channel name plus an $ sign in
front of it. A sample might be:
*.* $mychannel
Возможно, это работает:
local0.* $test_rotated
a: Это, по-видимому, зависит от версии rsyslog
Вы используете, следовательно на релизе Ubuntu. Это таким образом было бы сохранение, чтобы просто посмотреть на Вашу страницу справочника (man rsyslog.conf
) или выбрал правильный выпуск в сайте, который я связал.