2014-11-01 2 views
0

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

имен файлов выглядят как этот

data file-file201409.txt 

info data file 2014-10.txt 

И результат я хочу

data file-file.txt 

info data file.txt 

Вот что я пытался

for f in $previous_folder/*.txt; do 
    echo "$f" 
    mv "$f" "${f#*.txt}" 
done 

Но это не совсем работает

Я новичок в Linux, помогите мне.

+0

Посмотрите на команду 'rename', которая позволяет вам использовать регулярные выражения Perl при переименовании. – Barmar

ответ

1

Вы можете просто попробовать нижеуказанную команду rename.

rename 's/ *[0-9]{4}-?[0-9]{2}(?=\.txt$)//' $previous_folder/*.txt 

-? очередь - в качестве факультативных. [0-9]{4} Совпадает ровно четыре цифры.

(?=\.txt$) Этот positive lookahead подтверждает, что матч должен сопровождаться .txt. Он не будет потреблять никаких символов, но утверждает, где матч должен произойти.

+0

это также удаляет расширение .txt, но я хочу сохранить расширение – user59036

+0

проверить мое обновление. –

+0

Большое спасибо! Не возражаете ли вы объяснить часть, которую вы только что добавили? – user59036

0

Вы можете использовать расширение параметров с расширенной подстановкой:

#! /bin/bash 
shopt -s extglob 
for file in 'data file-file201409.txt' 'info data file 2014-10.txt' ; do 
    mv "$file" "${file%%+([-0-9 ]).txt}".txt 
done 

[-0-9 ] Удачных цифры, пространство и тир. +(...) означает, что может быть один или несколько совпадающих символов. %% удаляет самую длинную совпадающую строку с конца.

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