[英]Copy files from one folder to another with matching names in .txt file
[英]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.