用另一个文件夹中的修改版本替换一个文件夹及其所有子目录中的文件

时间:2013-04-17 12:40:44

标签: cygwin directory dos subdirectory

我有两个文件夹,一个名为' modified'还有一个名为“原创”的作品。

  • '改性'没有子目录,包含4000个wav文件,每个文件都有唯一的名称。
  • 4000个文件是来自'原始'的文件的副本。除了这个文件夹有许多子目录,原始的wav文件位于其中。

我想,对于'修改过的所有wav文件,将原来的'替换为名称对应的'无论他们在哪里。

例如,如果调用了一个文件' sound1.wav'在修改后,我想找到' sound1.wav'在原始'的某个子目录中并用修改后的版本替换原来的。

我运行Windows 8所以命令提示符或cygwin最适合工作。

1 个答案:

答案 0 :(得分:1)

根据要求,我编写了执行上述操作的python代码。我使用'os'和'shutil'模块首先导航目录,然后使用覆盖文件。

'C:/../ modified'是指包含我们已修改并希望用来覆盖原件的文件的目录。

'C:/../ originals'是指包含许多子目录的目录,其中的文件名与“modified”中的名称相同。

代码的工作原理是列出修改后的目录中的每个文件,对于每个文件,我们都说明了文件的路径。然后,我们查看原始目录的所有子目录,以及修改的和原始文件共享相同名称的位置,我们使用shutil.copyfile()替换原始文件。

因为我们正在使用Windows,所以有必要将斜杠的方向更改为“/”。

对已修改目录中的每个文件执行此操作。

如果有人遇到同样的问题,我希望这会派上用场!

import os
import shutil



for wav in os.listdir('C:/../modified'):
    modified_file = 'C:/../modified/' + wav



    for root, dirs, files in os.walk('C:/../original'):
        for name in files:
            if name == wav:
                original_file = root + '/' + name
                original_file = replace_file.replace('\\','/')

                shutil.copyfile(modified_file, original_file)
                print wav + ' overwritten'




print 'Complete'