Переименовать файл путем замены текста - поменять строку даты в начале имени файла - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужно переименовать файлы, поменяв местами текст.У меня было например:

eMail - 2015-11-28 1926.eml second mail - 2016-07-26 1245.eml third mL 2016-11-26 1410.eml 4-mail 2017-05-21 0105.eml

...

, и я хочу их

2015-11-28 1926 eMail - .eml 2016-07-26 1245 second mail - .eml 2016-11-26 1410 third mL.eml 2017-05-21 0105 4-mail.eml

..Часть пути, которую вы можете найти здесь:

я попробовал ls *.pdf | awk -F"[_.]" '{print "mv "$0" "$2"_"$1"."$3}' | sh
из> пример файла подкачки
, который работал goog, но не практично для .eml -files.

Второй пример имени файла подкачки тоже выглядит неплохо
, но я немного глуп, чтобы решить проблему

1 Ответ

0 голосов
/ 13 февраля 2019

Если regex доступно (bash версия> = 3.2), попробуйте следующее:

for f in *.eml; do
    if [[ $f =~ ^(.+)\ +([0-9]{4}-[0-9]{2}-[0-9]{2}\ +[0-9]+)\.eml$ ]]; then
        newname="${BASH_REMATCH[2]} ${BASH_REMATCH[1]}.eml"
        mv -- "$f" "$newname"
    fi
done
  • Регулярное выражение разбивает имя файла на «подстрока даты + числа» и«предыдущая подстрока» затем назначает bash-переменную ${BASH_REMATCH[@]} для захваченных групп.
  • Тогда newname назначается для файла с перестановкой.
...