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

问题描述 投票:0回答:1

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

FILE1.docx.txt
FILE2.docx.txt
FILE3.docx.txt
FILE4.docx.txt
FILE5.docx.txt

我想删除 .docx 从他们所有人的身上,使最终的输出,如

FILE1.txt
FILE2.txt
FILE3.txt
FILE4.txt
FILE5.txt

我怎么做呢?

linux bash shell command
1个回答
1
投票

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

import os

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

3
投票

参数扩展mv

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

独角戏

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

移除 echo 如果你认为输出是正确的,重命名文件。

应该可以在任何 POSIX 兼容的shell,不需要任何脚本。


在bash中,启用 nullglob shell选项,所以glob *.docx.txt 不按字面意思展开 *.docx.txt 如果没有以 .docx.txt

#!/usr/bin/env bash

shopt -s nullglob

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

更新:感谢 @Léa Gris 增加 nullglob 改为 *.docx.txt 并加 -nmv虽说 -n-v 不是由 POSIX 按照 https:/pubs.opengroup.orgonlinepubs9699919799utilitiesmv.html。 它应该在GNU和BSD中都有。mv


0
投票

你可以像这样利用sed和bash。

for i in *.docx.txt
do
    mv "$i" "`echo $i | sed 's/.docx//'`"
done
© www.soinside.com 2019 - 2024. All rights reserved.