本路人 发表于 2022-3-25 12:53

python怎么复制文件夹而忽略某些特定的文件

RT,我想实现复制某个文件夹及其子文件夹的内容到一个新的地址,但是要忽略某些指定的文件,
有一个文件夹data,一份要忽略的文件夹列表文件split.txt(内容大概是{data/jpg/1.jpg, data/jpg2/2.jpg......})成千上万个文件
我本来是打算用shutil.copytree实现的,比如
def get_ignored(path, files):
......
return ret #如{data/jpg/1.jpg, data/jpg2/2.jpg...}
shutil.copytree(src_path, tar_path, ignore=get_ignored)
但是可能是因为生成的忽略数组只有文件名没有文件夹目录结构,所以最后还是没有实现我想要的功能,
请问应该怎么实现?要先把那些各层的目录也从split.txt提取出来放到忽略列表里面吗

bester 发表于 2022-3-25 13:12

有那么麻烦吗 全复制过来,再枚举你忽略的文件直接删除不好么

本路人 发表于 2022-3-25 13:31

bester 发表于 2022-3-25 13:12
有那么麻烦吗 全复制过来,再枚举你忽略的文件直接删除不好么

太大了,那个文件夹超过2g,而且要时不时执行

cxx313120919 发表于 2022-3-25 13:42

遍历要复制的文件夹 然后 在复制之前 吧文件名拿着去split.txt 数组 模糊查询 有就跳过

luyers 发表于 2022-3-25 13:42

遍历目标文件夹 及其子文件夹 剔除要忽略的文件 复制到新路径

tencentma 发表于 2022-3-25 13:45

cxx313120919 发表于 2022-3-25 13:42
遍历要复制的文件夹 然后 在复制之前 吧文件名拿着去split.txt 数组 模糊查询 有就跳过

我觉得可以先遍历

本路人 发表于 2022-3-25 13:56

tencentma 发表于 2022-3-25 13:45
我觉得可以先遍历

主要还是文件夹比较大,而且有10万个零碎的文件,时常更新,每次执行一次就遍历有点太耗时了。之前想过生成一个比对文件,更新后就按比对文件只复制跟更新对应的新文件,但是这执行起来有点繁琐

本路人 发表于 2022-3-25 14:57

最后还是选择用xcopy来做了{:1_908:}

amorous_pp 发表于 2022-3-25 15:17

本帖最后由 amorous_pp 于 2022-3-25 15:18 编辑

用 rsync复制,rsync   folder1--exclude-from=split.txt folder2

yp17792351859 发表于 2022-4-7 16:36

递归,只复制需要的文件夹和文件
页: [1] 2
查看完整版本: python怎么复制文件夹而忽略某些特定的文件