簡體   English   中英

遞歸復制文件夾並更改復制文件的文件夾/文件名

[英]Recursively copy a folder and change folder/file names of copied files

如果它們包含特定字符串,我需要復制一個大文件夾並重命名其中的所有文件和文件夾。 基本上我想復制所有內容並將10任何實例更改為11

例如,如果我有一個這樣結構的文件夾:

mainfolder10
   -group10
       -group10.js
       -group10.html

我希望它像這樣復制它:

mainfolder11
   -group11
       -group11.js
       -group11.html

我也可以先用cp -r mainfolder10/ mainfolder11/復制它,然后使用不同的命令或腳本來重命名文件。 我只是在尋找任何不必手動執行此操作的方法。

我希望在 bash、node 或 python 中實現這一點……無論你們推薦什么。 有誰知道一個簡單的方法來做到這一點?

遞歸目錄和文件的常用技術是使用os.walk()

 for root, dirs, files in os.walk('somepath'):
      ...

從那里,您可以根據需要在逐個文件或逐個目錄的基礎上使用os.rename()或任何shutils

為避免混淆,我會在第一遍重命名所有文件,然后進行第二遍重命名目錄。

所以我最終用下面的腳本完成了這個。

#!/usr/bin/env python
# coding: utf-8

from pathlib import Path
import shutil
import tempfile

cohorts_master = Path.home() / "/Users/leo/Desktop/repos/drive-scripts"
cohorts_master

NEEDLE, REPLACEMENT = (f"C{i}" for i in range(39, 41))
src = cohorts_master / f"MIA {NEEDLE}"
src

assert src.exists(), f"'{src}' does not exist"

dest = Path(tempfile.mkdtemp()) / f"MIA {REPLACEMENT}"
print(dest)


try:  # I get errors here. Likely permissions problems. I was getting a partial copy
    shutil.copytree(src, dest)
except Exception as err:
    pass

for item in dest.glob("**/*"):
    shutil.move(item.as_posix(), item.as_posix().replace(NEEDLE, REPLACEMENT))


new_src = dest
new_dest = cohorts_master / dest.name.replace(
    REPLACEMENT, f"{REPLACEMENT}-copied-from-{NEEDLE}"
)
new_src, new_dest


shutil.copytree(new_src, new_dest)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM