如何使目录下所有文件的名字里每个字之间加入一个字

批量重命名,让目录下所有文件(包括子目录所有)文件的名字里,所有字之间(不包括扩展名)加入一个字。

img

几千几万个文件,文件名长度不一。文件里有子文件夹,子文件夹里还有子文件夹。

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)