2014-11-18 4 views
1

Я ищу способ пакетного переименования почти 1000 файлов журнала, созданных боттом Eggdrop. Несколько лет назад мне пришлось настраивать бота с нуля и пренебрегать настройкой формата журнала, поэтому все эти файлы теперь имеют формат:Пакетное переименование файлов журнала из одного формата времени в другой

channelname.log.% D% b% Y (имя канала. log.14Jan2014)

Я хочу, чтобы переименовать все эти файлы, чтобы соответствовать всем моим старым файлам журналы, которые находятся в формате:.

channelname.log% Y% м% D (channelname.log.20140101)

Я уже внес изменения в файл eggdrop.conf, но я хотел бы переименовать все новые файлы журнала в соответствии с форматом старых.

Это в оболочке Linux, поэтому какая-то команда bash была бы идеальной. Благодаря!

ответ

2
find . -type f -name '*.log.*[^0-9-]*' -print0 | while read -d '' -r logfile; do 
    mv "${logfile}" "${logfile/.log.*/.log.`date -d ${logfile#*.log.} +%Y-%m-%d`}" 
done 

Предполагая, что это в локали date знает, как обращаться.

+0

Эта команда дала мне вывод «date: invalid date»% Y-% m-% d '", равный количеству файлов. После его завершения все, что осталось в каталоге, было одним именем файла «channelname.log». , (разумеется, я сначала создал резервные копии всех журналов, прежде чем пытаться). Я посмотрю, смогу ли я выяснить, где она сломалась. – fog

+0

Получил это, похоже, что это была небольшая опечатка, где у вас был «$ {i # *. Log.}», Это должно быть «$ {logfile # *. Log.}». Благодаря! – fog

+0

Ах, извините, и, к счастью, вы скопировали;) Да, я обычно тестирую конструкцию 'for i in ...', которая оставалась мною, заменяя правильное имя переменной, но, видимо, не полностью, извинения! – Wrikken