Linux:删除多个文件的文件扩展名

标签 linux bash rename

我有许多带有 .txt 扩展名的文件。 如何在linux中删除多个文件的.txt扩展名?

我发现了

rename .old .new *.old

.old 扩展替换为 .new

我也想对子文件夹中的文件执行此操作。

最佳答案

rename 有点危险,因为根据它的manual page :

rename will rename the specified files by replacing the first occurrence of...

它会很乐意对像 c.txt.parser.y 这样的文件名做错事。

这是一个使用 findbash 的解决方案:

find -type f -name '*.txt' | while read f; do mv "$f" "${f%.txt}"; done

请记住,如果文件名包含换行符,这将中断(很少见,但并非不可能)。

如果你有 GNU find,这是一个更可靠的解决方案:

find -type f -name '*.txt' -print0 | while read -d $'\0' f; do mv "$f" "${f%.txt}"; done

关于Linux:删除多个文件的文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4509485/

相关文章:

linux - "/bin/bash cd ~"结果为 "/bin/bash: cd: No such file or directory",为什么?

r - 根据上一行有条件地重命名该值

linux - 如何测试变量是否是 bash 中的字符串?

linux - cPanel/WHM IP 封禁 - 如何取消 IP 封禁

bash - 在 mac OS X 中登录时运行脚本

bash - 将所有消息从内部脚本重定向到日志文件,控制台和屏幕上的一些打印命令输出除外

重命名管道中的多个变量

windows - 使用 Windows 批处理脚本重命名目录中的所有文件

java - 发生 NullPointerException 尝试在空对象引用上调用虚方法

linux - Sed: 找不到文件或目录