我在一个目录下有一些文件,比如
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
我怎么做呢?
只要在包含文件的同一个文件夹中运行这个python脚本。
import os
for file in os.listdir(os.getcwd()):
aux = file.split('.')
if len(aux) == 3:
os.rename(file, aux[0] + '.' + aux[2])
用 参数扩展 和 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
并加 -n
到 mv
虽说 -n
和 -v
不是由 POSIX
按照 https:/pubs.opengroup.orgonlinepubs9699919799utilitiesmv.html。 它应该在GNU和BSD中都有。mv
你可以像这样利用sed和bash。
for i in *.docx.txt
do
mv "$i" "`echo $i | sed 's/.docx//'`"
done