我想从文件名列表中删除日期
文件名看起来像这样
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 :(得分: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 ]
匹配数字,空格和短划线。 +(...)
表示可以有一个或多个匹配的字符。 %%
从末尾删除最长的匹配字符串。