首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux中删除文件名中的某些字符

在Linux中删除文件名中的某些字符
EN

Stack Overflow用户
提问于 2020-05-06 02:29:21
回答 3查看 53关注 0票数 0

我在一个目录中有一些文件,如

代码语言:javascript
复制
FILE1.docx.txt
FILE2.docx.txt
FILE3.docx.txt
FILE4.docx.txt
FILE5.docx.txt

我想从所有这些输出中删除.docx,以生成最后的输出,如

代码语言:javascript
复制
FILE1.txt
FILE2.txt
FILE3.txt
FILE4.txt
FILE5.txt

我该怎么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-06 02:44:18

只需在包含文件的同一个文件夹中运行这个python脚本:

代码语言:javascript
复制
import os

for file in os.listdir(os.getcwd()):
    aux = file.split('.')
    if len(aux) == 3:
        os.rename(file, aux[0] + '.' + aux[2])
票数 1
EN

Stack Overflow用户

发布于 2020-05-06 02:48:49

使用参数展开mv

代码语言:javascript
复制
for f in *.docx.txt; do
  echo mv -vn "$f" "${f%%.*}.${f##*.}"
done

一条龙

代码语言:javascript
复制
for f in *.docx.txt; do echo mv -vn "$f" "${f%%.*}.${f##*.}"; done        

如果您认为输出是正确的,请删除echo,以重命名文件。

应该在没有任何脚本的任何POSIX兼容的shell中工作。

使用bash时,启用nullglob shell选项,以便在没有以.docx.txt结尾的文件时,glob *.docx.txt不会以文字*.docx.txt形式展开。

代码语言:javascript
复制
#!/usr/bin/env bash

shopt -s nullglob

for f in *.docx.txt; do
  echo mv -vn "$f" "${f%%.*}.${f##*.}"
done

更新:由于@Léa Gris添加nullglob,将glob更改为*.docx.txt,将-n添加到mv,尽管POSIX没有将-n-v定义为per https://pubs.opengroup.org/onlinepubs/9699919799/utilities/mv.html,但-n-v应该同时存在于GNU和BSD mv

票数 3
EN

Stack Overflow用户

发布于 2020-05-06 05:55:09

您可以像这样使用sed和bash:

代码语言:javascript
复制
for i in *.docx.txt
do
    mv "$i" "`echo $i | sed 's/.docx//'`"
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61626346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档