从子目录复制某些扩展名的文件,并将它们放在相同结构的新子目录中

时间:2017-11-02 20:37:43

标签: python python-3.x

我正在查看计算机列表并搜索某个目录和子目录以查找文件扩展名为.exe.config的任何内容

我想将那些以.exe.config结尾的文件放在同一结构的备份目录中。所以这将以递归方式完成。

例如,“main”是主目录。 “main”中有几个子目录称为“1”,“2”,“3”等

main
\
 \-----------
 \   \    \
 1   2    3

在每个编号的目录中,都会有一个扩展名为.exe.config

的文件

我想获取主目录名,子目录名和* ​​.exe.config文件。然后将它们放在具有相同结构的备份“main”目录中。

这些编号目录中还有其他文件,但我想忽略这些文件。

我无法递归复制所有内容。这是我一直在测试的代码。计算机列表放在serverlist.txt

import os
import shutil
import fileinput

def copy_names(servername):

    source = r'//' + servername + '/c$/Program Files (x86)/Main/'
    dest = r'//' + servername + '/c$/' + servername + '/Main/'

    for root, dirs, files in os.walk(source):
        for file in files:
            if file.endswith('.exe.config'):
                try:
                    os.makedirs(dest, exist_ok=True)
                    shutil.copyfile(os.path.join(source, file), os.path.join(dest, file))
                    print ("\n" + servername + " " + file + " : Copy Complete")
                except:
                    print (" Directory you are copying to does not exist.")

def start():
    os.system('cls' if os.name == 'nt' else 'clear')
    array = []
    with open("serverlist.txt", "r") as f:
        for servername in f:
            copy_names(servername.strip())


# start program
start()

1 个答案:

答案 0 :(得分:1)

尝试这些更改?

import os
import shutil
import fileinput

def copy_names(servername):

    source = r'//' + servername + '/c$/Program Files (x86)/Main/'
    dest = r'//' + servername + '/c$/' + servername + '/Main/'

    for root, dirs, files in os.walk(source):
        for file in files:
            if file.endswith('.exe.config'):
                file_src = os.path.join(root, file)
                file_dest = file_src.replace('Program Files (x86)', servername)
                os.makedirs(os.path.dirname(file_dest), exist_ok=True)
                try:
                    shutil.copyfile(file_src, file_dest)
                    print ("\n" + servername + " " + file + " : Copy Complete")
                except:
                    print (" Directory you are copying to does not exist.")

def start():
    os.system('cls' if os.name == 'nt' else 'clear')
    array = []
    with open("serverlist.txt", "r") as f:
        for servername in f:
            copy_names(servername.strip())


# start program
start()

os.path.join(source, file)没有为您提供源文件的正确位置;你应该使用类似os.path.join(root, file)的东西。

获得file_dest可能比file_dest = file_src.replace('Program Files (x86)', servername)更有效,但我想不出ATM。