我在一个目录中有3个文件,如下所示:
file_str_23.txt
file_jan_24.txt
file_feb_25.txt
这里我想用'file_'替换第一个文件名'file_str',所以最后文件名应该是'file_23.txt'。
问题是我不知道文件名中的确切数字,所以我应该只使用'file_str'字符串。
怎么做?
答案 0 :(得分:3)
要更改单个文件的名称,请使用mv
:
mv file_str_23.txt file_23.txt
如果您想批量执行此操作,可以尝试rename
,它接受正则表达式:
rename 's/_.*?_/_/' file_*
第一个参数是Perl正则表达式替换表达式。一般形式是:
s/WHAT_TO_LOOK_FOR/WHAT_TO_PUT_INSTEAD/
在我们的案例中,WHAT_TO_LOOK_FOR为_.*?_
,WHAT_TO_PUT_INSTEAD为_
。
现在,_.*?_
表示:“匹配下划线后跟任意数量的任何字符(.*?
),后跟另一个下划线”。例如,在字符串“file_str_23.txt”中,它将匹配“str”。
文件名的匹配部分将替换为_
(我们的WHAT_TO_PUT_INSTEAD部分)。
答案 1 :(得分:1)
如果你正在使用bash,你也可以使用这个
for F in file_*.txt ; do
mv ${F} file_${F#file_*_}
done
这很容易制作成一行:
for F in file_*.txt ; do mv ${F} file_${F#file_*_} ; done
答案 2 :(得分:1)
你可以试试这个循环,它可以在没有任何外部工具的情况下工作:
for f in *_*_*.txt; do
mv "$f" "${f/_*_/_}"
done