2014-11-01 68 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 2014-11-01 00:33:22

回答

1

您可以簡單地嘗試下面的rename命令。

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

-?反過來-可選。 [0-9]{4}正好匹配四位數。

(?=\.txt$)positive lookahead聲明匹配後必須跟着.txt。它不會消耗任何字符,但會聲明匹配發生的地方。

+0

這也刪除了.txt擴展名,但我想保留擴展 – user59036 2014-11-07 03:18:31

+0

檢查我的更新。 – 2014-11-07 03:19:34

+0

非常感謝!你介意解釋一下你剛添加的部分嗎? – user59036 2014-11-07 03:29:40

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 ]匹配位數字,空格和破折號。 +(...)表示可以有一個或多個匹配字符。 %%從結尾刪除最長的匹配字符串。

相關問題