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

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

我有大约 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 

答案1

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

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

rename _001.f ""  *_001.f.txt
rename _001.f _rt *_001.f.txt

第二种类型使用 Perl 替换:

rename 's/_001\.f//'    *_001.f.txt
rename 's/_001\.f/_rt/' *_001.f.txt

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

for f in *_001.f.txt ; do
    mv "$f" "${f%_001.f.txt}".txt
    mv "$f" "${f%_001.f.txt}"_rt.txt
done

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

答案2

我不确定我是否正确理解了你的意思。以下代码将“示例”文件重命名为“重命名”文件:

for f in *.txt; do mv "$f" "$(echo "$f" | sed -e 's/001.f/rt/')";done

相关内容