在Bash中移除文件名点间中间部分,求更简便实现方法
几种简便的实现方式
不用awk也能轻松搞定,这里给几个更直接的方法:
1. Shell 参数扩展(无需额外工具,最快)
直接用bash/zsh自带的参数替换功能,不用调用任何外部命令:
# 处理单个文件名示例 filename='myfile.20240101.txt' new_filename="${filename%%.*}.${filename##*.}" echo "$new_filename" # 输出:myfile.txt
${filename%%.*}:截取第一个.之前的部分(比如myfile)${filename##*.}:截取最后一个.之后的部分(比如txt)- 拼接起来就是目标文件名
2. sed 命令
用正则替换快速修改:
echo 'otherfile.20240303.txt' | sed 's/\..*\././' # 输出:otherfile.txt
正则\..*\.\会匹配第一个.到最后一个.之间的所有内容,直接替换成单个.即可。
3. rename 批量修改文件
如果要批量处理一堆文件,用perl版本的rename最方便:
rename 's/\..*\././' *.txt
执行后所有xxx.yyy.txt格式的文件都会被自动改成xxx.txt。
内容的提问来源于stack exchange,提问作者PaulM
相关产品推荐
相关产品推荐

