0

我正在编写一个重命名数据库中大多数文件夹的脚本。材料是如此敏感,以至于我真的不喜欢在原始数据库中玩弄脚本的想法。我喜欢仅复制结构并使用模拟结构测试脚本的想法。

经过一个糟糕的睡眠后得到了这个想法,这甚至可行吗?:)

在 unix 中使用 python

4

3 回答 3

2

以下代码将复制ato的结构b

import os

def dup_structure(src, dst):
    os.makedirs(dst)
    for p, ds, fs in os.walk(src):
        for dn in ds:
            dp = os.path.relpath(os.path.join(p, dn), src)
            os.makedirs(os.path.join(dst, dp))
        #for fn in fs:
        #    fp = os.path.relpath(os.path.join(p, fn), src)
        #    with open(os.path.join(dst, fp), 'wb'): pass

dup_structure('a', 'b')
  • 运行前确保目录b不存在。
  • 此代码不会重复文件。如果您想要重复文件,请取消注释注释行。

重命名目录时,应该从下往上遍历目录。

于 2013-06-25T06:19:33.867 回答
0

我建议您在文件夹重构程序的测试设置中执行这一点 shell 脚本

cd /mytest/; find /folder/with/database -type d -print0 | xargs -0 mkdir -p 

它是如何工作的: chdir 到你想要空文件夹的副本去的目标

find命令适用于“实时”数据库的绝对路径

type d只是目录

print0意味着处理包含空格的名称是安全的

xargs执行在标准输入输入的每个参数给出的命令

mkdir 的 -p 参数不是严格需要的,但会在目标上方创建不存在的文件夹

如果这是我的项目,我每次运行自动化测试套件时都会这样做

于 2013-06-25T06:26:23.353 回答
0

即使使用标准的 unix 实用程序,您也可以做到这一点,而无需编程。只需创建目录结构的 tar 归档文件,然后根据需要随时将其扩展(将 a 的结构复制到 b):

cd a
find . -type d | xargs tar --no-recursion -r -f ../a.tar
cd ..
mkdir b
cd b
tar xf ../a.tar
于 2013-06-25T06:29:47.050 回答