批量重命名,让目录下所有文件(包括子目录所有)文件的名字里,所有字之间(不包括扩展名)加入一个字。
几千几万个文件,文件名长度不一。文件里有子文件夹,子文件夹里还有子文件夹。
1.想遍历文件夹,递归呀
2.文件名加字,遍历str的每个字符,拼接新的str
sed 命令配合 for 循环方式
假如我们现在有一堆文件,文件名格式是 test01.txt、test02.txt、test03.txt、test04.txt 也就是前半部分是英文,后半部分是数字。我们现在想将文件名改成 test-01.txt 这种形式。这次,我们用 sed 命令来完成这个需求。
先来看看完整的代码:
#!/bin/bash
for file in `ls *.txt`
do
newFile=`echo $file | sed 's//\1-\2/'`
mv $file $newFile
done
前面一样用 ls \*.txt
来获取所有的 .txt 文件。之后再用 echo 命令将其顺次输出,作为 sed 命令的输入。
s/ 原字符串 / 替代的字符串 /
这里我们用到了分组匹配,也就是用括号按照一定的正则表达式将原字符串进行分组,后面再用 \1,\2,\3…… 来引用前面的分组,从而在替代的字符串里拼凑成相应的格式。
前文已讲述,原文件名是由前部分英文及后部分数字所构成的,英文可以用 [a-z]+ 表示,数字可以用 [0-9]+ 表示。注意不要忘记加号,表示前面字符的若干重复。然后,我们用 \1、\2 分别引用前面的对应部分,再用横杆连起来,于是就成了这样::
s/([a-z]+)([0-9]+)/\1-\2/
因为在不同的 Shell 里,括号及加号可能会有不同的含义,所以前面要再加一个转义符,于是就成了前面所见到的样子。
再之后,同样使用 mv 命令完成重命名动作。
先使用os.walk() 获取所有文件目录。https://www.runoob.com/python/os-walk.html
在使用os.rename更改文件名https://www.jianshu.com/p/a66dcb250d7a
下面代码也许能满足你的需求,有用的话请点击采纳:
import os
def rename_dirs(dir):
if not dir.endswith('/'):
dir += '/'
for file in os.listdir(dir):
if os.path.isfile(dir+file):
before_name = file.split('.')[0]
after_name = file.split('.')[-1]
temp = ''
for temp_s in before_name:
temp += temp_s
temp += '的'
file_rename = temp[:-1] + '.' + after_name
os.rename(dir+file, dir+file_rename)
else:
rename_dirs(dir+file)
if __name__ == '__main__':
dir = '需要重命名文件夹'
rename_dirs(dir)