У меня есть 400 простых текстовых файлов, которые мои письма штук, все названные в качестве таковых,Попытаться автоматически переименовывать дату в именах файлов, используя Bash регулярное выражение
A prose (June 30, 2013)
A sad story (Dec. 1, 2016)
Части имен файлов в основном на китайском или содержат по-китайски, но я полагаю, это не имеет значения. я хочу переименовать их, чтобы быть
130630_A prose
161201_A sad story
с помощью Bash сценария.
Возможно, это первый раз, когда я написал сценарий Bash. Я достаточно хорошо знаком с C++, но я нахожу Bash трудным для изучения. Хотя у меня есть основное знакомство с регулярным выражением Vim, я понимаю, что регулярное выражение Bash похоже. Я в основном полагался на this reference on wildcards.
Моя попытка, как показано ниже:
#! /usr/bin/env bash
EXT=.txt
for name_old in "*${EXT} */*${EXT} */*/*${EXT}"; do
str_title=$(expr "${name_old}" : '\(.*\)(.*).*')
str_date=$(expr "${name_old}" : '.*(\(.*\)).*')
str_y=$(expr "${str_date}" : '.*\([0-9]*\).*')
str_m=$(expr "${str_date}" : '.*\([a-zA-Z]*\).*')
str_d=$(expr "${str_date}" : '.*\([0-9]*,\).*')
if [ ${#str_y} -eq 0 ] || [ ${#str_m} -eq 0 ] || [ ${#str_d} -eq 0 ] ; then
continue
fi
name_new="${name_new}${str_y:2:3}"
convert_month "${str_m}" hold
name_new="${name_new}hold"
if [ ${#str_d} -eq 1 ]; then
name_new="${name_new}0${str_d:0:0}"
elif [ ${#str_d} -eq 2 ]; then
name_new="${name_new}${str_d:0:1}"
fi
name_new="${name_new}_${str_title}"
mv name_old name_new
done
function convert_month
{
if [ "$(expr "$(1)" : '.*\(Jan\).*')" -ne "" ]; then
$(2)=01
# ... omitted for brevity
elif [ "$(expr "$(1)" : '.*\(Dec\).*')" -ne "" ]; then
$(2)=12
fi
}
Кажется, ничего не происходит. Некоторый синтаксис - это только моя догадка, поэтому я думаю, что многие шаги многие ошибаются. Но я не могу найти в Stack Overflow пример такой сложный, как этот, и я не знаю, как отлаживать.
Вторая строка ввода выглядит подозрительно: «Печальная история (1 декабря 2016 года)' '' 'после' Дека' не должна быть там? – Inian
Да, он есть. Это мое соглашение об именах, или было ... я решил изменить. Да, это плохо. История состоит в том, что я сожалею, что включил столько пространств и периодов и выбрал так многословный стиль именования для даты. И теперь я хочу скомпилировать их в CLI и столкнулся с огромными трудностями. – Aminopterin