我有一个带有子文件夹的文件夹结构,其中包含相同名称的文件。我想复制文件,包括文件夹层次结构。例如:
path/to/folder/A
包含包含文件a
的子文件夹b
,c
,backup.txt
。我想将它们复制到另一个文件夹:
path/to/another/destination
在Windows 10中找不到类似的东西。我试图在Python中解决此问题。
运行下面的代码应将A
下的整个结构复制到path/to/another/destination
,这样destination
将具有文件夹A(包括A)的副本,但仅包含那些子文件夹其中包含文件file
。
该代码不执行任何操作。它既不会在destination
中创建文件夹('A'),也不会将文件从源复制到目标。似乎未执行以下命令:os.mkdir
,os.makedirs
和shutil.copy
。我在目的地中看不到任何新文件夹。
from sys import argv, exit
from os.path import split, splitext, join, isdir, exists, normpath
from os import walk, makedirs, mkdir, sep
from shutil import copy
file = argv[1]
source = normpath(argv[2])
dest = normpath(argv[3])
main_fol = source.split(sep)[-1]
for p,_,f in walk(source):
char_fol = join(*p.split(sep)[-2:])
new_dest = join(dest, main_fol, char_fol)
for e in f:
if file in e:
if not exists(new_dest):
mkdir(new_dest)
copy(join(p,e), new_dest)
编辑。
我在D:\source
中有一个源文件夹,其中包含许多包含文件ElvUI.*
的子文件夹。我评论了copy
和if not exit ...
并在代码中添加了print
行:
# ...
print("Fom:", join(p,e))
print("To:", new_dest)
print("")
当我执行python脚本时:
python copy_files.py ElvUI D:\source D:\destination
我在下面得到了这个输出。因此它确实可以找到文件。
Fom: D:\source\Agola\SavedVariables\ElvUI.lua
To: D:\destination\source\Agola\SavedVariables
Fom: D:\source\Agola\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Agola\SavedVariables
Fom: D:\source\Anders\SavedVariables\ElvUI.lua
To: D:\destination\source\Anders\SavedVariables
Fom: D:\source\Anders\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Anders\SavedVariables
Fom: D:\source\Benjo\SavedVariables\ElvUI.lua
To: D:\destination\source\Benjo\SavedVariables
Fom: D:\source\Benjo\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Benjo\SavedVariables
Fom: D:\source\Berni\SavedVariables\ElvUI.lua
To: D:\destination\source\Berni\SavedVariables
Fom: D:\source\Berni\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Berni\SavedVariables
Fom: D:\source\Caroin\SavedVariables\ElvUI.lua
To: D:\destination\source\Caroin\SavedVariables
Fom: D:\source\Caroin\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Caroin\SavedVariables
Fom: D:\source\Cornel\SavedVariables\ElvUI.lua
To: D:\destination\source\Cornel\SavedVariables
Fom: D:\source\Cornel\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Cornel\SavedVariables
Fom: D:\source\Dan\SavedVariables\ElvUI.lua
To: D:\destination\source\Dan\SavedVariables
Fom: D:\source\Dan\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Dan\SavedVariables
Fom: D:\source\Diana\SavedVariables\ElvUI.lua
To: D:\destination\source\Diana\SavedVariables
Fom: D:\source\Diana\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Diana\SavedVariables
Fom: D:\source\Ela\SavedVariables\ElvUI.lua
To: D:\destination\source\Ela\SavedVariables
Fom: D:\source\Ela\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Ela\SavedVariables
Fom: D:\source\Josephine\SavedVariables\ElvUI.lua
To: D:\destination\source\Josephine\SavedVariables
Fom: D:\source\Josephine\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Josephine\SavedVariables
Fom: D:\source\Lindas\SavedVariables\ElvUI.lua
To: D:\destination\source\Lindas\SavedVariables
Fom: D:\source\Lindas\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Lindas\SavedVariables
Fom: D:\source\Lorek\SavedVariables\ElvUI.lua
To: D:\destination\source\Lorek\SavedVariables
Fom: D:\source\Lorek\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Lorek\SavedVariables
Fom: D:\source\Lucjan\SavedVariables\ElvUI.lua
To: D:\destination\source\Lucjan\SavedVariables
Fom: D:\source\Lucjan\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Lucjan\SavedVariables
Fom: D:\source\Margaret\SavedVariables\ElvUI.lua
To: D:\destination\source\Margaret\SavedVariables
Fom: D:\source\Margaret\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Margaret\SavedVariables
Fom: D:\source\Nelia\SavedVariables\ElvUI.lua
To: D:\destination\source\Nelia\SavedVariables
Fom: D:\source\Nelia\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Nelia\SavedVariables
Fom: D:\source\Novak\SavedVariables\ElvUI.lua
To: D:\destination\source\Novak\SavedVariables
Fom: D:\source\Novak\SavedVariables\ElvUI.lua.bak
To: D:\destination\source\Novak\SavedVariables