删除文本文件bash中的文件扩展名[重复]

Posted

技术标签:

【中文标题】删除文本文件bash中的文件扩展名[重复]【英文标题】:Removing the file extension in a text file bash [duplicate] 【发布时间】:2016-10-23 01:30:08 【问题描述】:

所以我在一个文本文件中放了很多文件名,这些文件具体是.log 文件:

ls *.log > finished_data.txt

现在我有了.log 文件的列表,如何保留名称但删除.log 扩展名? 我的思维过程正在重命名它们?

【问题讨论】:

你有没有注意到这个页面右上角的Search Q&A框? 【参考方案1】:

只需遍历.log 文件并移动它们:

for file in *.log
do
    mv "$file" "$file%.log"
done

这使用shell parameter expansion:

$ d="a.log.log"
$ echo "$d%.log"
a.log

【讨论】:

谢谢你,完美的工作我怎么能扭转行动?说在某些文件的末尾添加 .log? @user3667111 就说mv "$file" "$file.log" @gniourf_gniourf 哦,谢谢,我总是对%%% 感到困惑。我看到% 去掉了最短的匹配,这是最准确的。关于for循环的语法:有什么区别吗? @gniourf_gniourf 啊,真的!我误解了您的评论,并认为您指的是使用 for file in ...; do 而不是 for file in ... + new line + do。你是绝对正确的,更新。【参考方案2】:

使用rename 重命名所有.log 文件,方法是从末尾删除.log

rename 's/\.log$//' *.log
\.log$ 与文件名末尾的 .log 匹配,并通过替换为空白来省略

如果您使用的是prename,那么您可以先进行试运行:

rename -n 's/\.log$//' *.log

如果对所做的更改感到满意:

rename 's/\.log$//' *.log

【讨论】:

以上是关于删除文本文件bash中的文件扩展名[重复]的主要内容,如果未能解决你的问题,请参考以下文章

删除 bash 中的双重扩展

仅从 Bash 脚本中的路径获取文件名 [重复]

在 Bash 中获取文件的扩展名 [重复]

使用 find [重复] 在 bash 中操作字符串(文件扩展名)

如何在bash中检索文件名或扩展名[重复]

sh 使用BASH删除文件扩展名