根据全局列表复制和重命名子目录中的文件

问题描述

我正在尝试将所有子目录中名为“mypicture.jpg”的所有文件复制并重命名为“picture.jpg”。如果我这样做:

import glob
source = glob.glob('**/mypicture.jpg',recursive=True)
print(source)

显示了我所有的mypicture.jpg,但是是否可以根据列表复制和重命名每个目录中的.jpg?

在 shell 中我只做:

find ./ -name 'mypicture.jpg' -execdir cp -prv '{}' './picture.jpg' ';'

它做我想做的事。

只是为了复制和重命名我可以使用 shutil.copyfile(source,destination) 但只是文件的路径,所以我的问题是: 如何将文件路径从我的列表传递到我的 source= 并循环/迭代它然后对列表中的所有文件?这甚至可能吗?还是我必须使用其他功能

好的,使用路径库:

from pathlib import Path
import shutil

dirpath=Path(r'W:/directory')

files=dirpath.rglob("mypicture.jpg")
for path in files:
    print(path)
    shutil.copy(path,path.parent / 'picture.jpg',follow_symlinks=True)

它有效,我有什么需要注意的吗?

解决方法

#import modules
from pathlib import Path
import shutil

#define directory
dirpath=Path('W:/directory')

#search for files path with given name in dir and subdir using rglob
files=dirpath.rglob("mypicture.jpg")

#copy file in same directory with new name to rename
for path in files:
    print(path)
    shutil.copy(path,path.parent / 'picture.jpg',follow_symlinks=True)