2016-02-25 3 views
1

У меня есть файлы с именем:Переименовать файлы с помощью bash/regex?

test-12.5.0_567-release.apk 

Я хочу, чтобы выглядеть следующим образом:

test-release.apk 

я понял, что могу это сделать с Баш:

for file in *release.apk; do 
    mv "$file" "`basename $file SOMETHING`NEW_FILE_NAME"; done 

Она нуждается в какой-то регулярное выражение я думаю ? Как это будет выглядеть?

Спасибо!

ответ

4

Вы можете сделать:

for file in *release.apk; do 
    mv "$file" "${file/-*-/-}" 
done 
+1

Да, спасибо большого! –

0

В качестве альтернативы вы можете использовать это:

for file in *release.apk; do 
    mv "$file" "${file%-*-*}-release.apk" 

Я удаляю -12.5.0_567-release.apk, а затем добавить -release.apk.

Однако IMHO anubhava's solution выглядит лучше, поскольку он более точно выполняет то, что вы хотите.

0

Другая альтернатива, с реальным регулярным выражением и группами захвата. Он использует =~ оператор и BASH_REMATCH массива (содержащие захваченные подгруппы)

for file in *; do 
    # check if the filename matches the regex and extract 2 groups 
    if [[ $file =~ ([^-]*-).*-([^-]*) ]]; then 
    # use the captured groups 
    mv "$file" "${BASH_REMATCH[1]}${BASH_REMATCH[2]}"; 
    fi 
done 
0

Вы можете использовать регулярное выражение с помощью команды rename:

rename 's/-*-/-/g' *release.apk

Смежные вопросы