1

У меня много данных с такими именами файлов:

combination.2005.0801.txt
combination.2005.0802.txt 
...
combination.2005.0830. txt

Что мне делать, если я хочу переименовать эти файлы так?

20100801.txt  
20100802.txt
...
20100803.txt

Я уже пытался использовать следующий скрипт, но, к сожалению, скрипт не работает.

rename 's/combination.(.*).(.*).txt/$1.txt/' *.txt

2 ответа2

0

При использовании (Perl-совместимых или более общих, большинства) регулярных выражений вы должны помнить об этом . будет соответствовать любому персонажу; не только точки (но также только один символ, если нет квантификатора).

Следующее не проверено, но я, вероятно, попытался бы использовать это решение на основе этого вопроса и ответов:

$ for old in ./combination*.txt; do
    new=$(echo $old | sed -r 's/combination\.([[:digit:]]+)\.([[:digit:]]+)\.txt$/\\1\\2.txt/')
    mv -v "$old" "$new"
  done

Имейте в виду, что это не проверено и может сломаться. Вы также можете использовать echo а не mv чтобы сначала все проверить. :)

-1
$ for i in combination*.txt; do
   mv $i $(echo $i | awk -F\. '{print $2$3"."$4}'); 

done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .