如何删除/替换Linux中文件名列表的通用后缀?

sun*_*vin -1 bash

我有大约 100 个 *.txt 文件。

我想删除/替换txt文件的后缀。

我如何在 LINUX 中做到这一点。

Example:
1_S9_001.f.txt
2_S13_001.f.txt
3_S23_001.f.txt
4_S45_001.f.txt
5_S90_001.f.txt

Changing the file name:
1_S9.txt
2_S13.txt
3_S23.txt
4_S45.txt
5_S90.txt 

Renaming:
1_S9_rt.txt
2_S13_rt.txt
3_S23_rt.txt
4_S45_rt.txt
5_S90_rt.txt 
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 5

根据系统的不同,命令的行为rename可能会有很大不同。检查man页面了解详细信息。

第一种类型更简单,您只需告诉它要替换什么字符串以及用什么字符串替换它:

rename _001.f ""  *_001.f.txt
rename _001.f _rt *_001.f.txt
Run Code Online (Sandbox Code Playgroud)

第二种类型使用 Perl 替换:

rename 's/_001\.f//'    *_001.f.txt
rename 's/_001\.f/_rt/' *_001.f.txt
Run Code Online (Sandbox Code Playgroud)

或者您可以使用循环和参数扩展自行构造新名称:

for f in *_001.f.txt ; do
    mv "$f" "${f%_001.f.txt}".txt
    mv "$f" "${f%_001.f.txt}"_rt.txt
done
Run Code Online (Sandbox Code Playgroud)

%“从右侧删除”的意思与#从左侧删除类似。