从目录中的许多文件的文件名中删除日期

时间:2014-11-01 00:30:44

标签: bash unix

我想从文件名列表中删除日期

文件名看起来像这样

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的新手,请帮助我。

2 个答案:

答案 0 :(得分:1)

您只需尝试以下rename命令。

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

-?-视为可选项。 [0-9]{4}正好匹配四位数。

(?=\.txt$)positive lookahead断言匹配必须后跟.txt。它不会消耗任何字符,但会断言匹配发生的位置。

答案 1 :(得分:0)

您可以使用扩展globbing参数扩展:

#! /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 ]匹配数字,空格和短划线。 +(...)表示可以有一个或多个匹配的字符。 %%从末尾删除最长的匹配字符串。