linux下合并多个文件夹内容成为一个文件夹

下载的数据集有多个部分,如part1、part2等,未找到直接合并的命令行。使用Python脚本merge_folder.py,将其放入各文件夹,通过命令python merge_folder.py part1 part2等依次合并,最终只剩一个包含所有内容的文件夹。还提及一个可能实现相同效果的命令行链接但未尝试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个数据集下载下来有多个部分,part1,part2,part3…需要将这多个部分合成一个部分。查了下,没找到直接可以达到效果的命令行(试过cat,rsync等)

解决方案:
写一段python脚本:merge_folder.py

#!/usr/bin/env python3

import argparse
import os

def move_merge_dirs(source_root, dest_root):
    for path, dirs, files in os.walk(source_root, topdown=False):
        dest_dir = os.path.join(
            dest_root,
            os.path.relpath(path, source_root)
        )
        if not os.path.exists(dest_dir):
            os.makedirs(dest_dir)
        for filename in files:
            os.rename(
                os.path.join(path, filename),
                os.path.join(dest_dir, filename)
            )
        for dirname in dirs:
            os.rmdir(os.path.join(path, dirname))
    os.rmdir(source_root)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description='Move merge src/* into dest. Overwrite existing files.'
    )
    parser.add_argument('src_dir')
    parser.add_argument('dest_dir')
    args = parser.parse_args()
    move_merge_dirs(args.src_dir, args.dest_dir)

然后将脚本.py文件放入part1,part2,part3…文件夹,
然后进行合并:python merge_folder.py part1 part2(将part1,part2合并到part2),这样之后,就没了part1文件夹,part1中的内容到part2中去了,然后按照相同规律合并part2,part3,最后只会剩下一个文件夹,包含了part1,part2,part3…中所有的内容。

后面发现,貌似这个命令行也可以实现一样的效果,不过没有尝试过:https://www.linuxidc.com/Linux/2012-12/75974.htm。

### 合并多个文件夹至单一文件夹的方法 在 Ubuntu 或其他 Linux 发行版中,可以使用 `cp` 和 `mv` 命令来合并不同源目录中的内容到目标目录。对于不希望覆盖已存在文件的情况,或者需要保留原文件路径结构的部分场景,则可能更倾向于编写 shell 脚本来批量处理。 #### 使用 cp 命令进行简单复制操作 当不需要保持原有子目录结构而只是单纯地把所有文件移动到一个新的位置时,可以直接采用 `cp` 命令加上通配符来进行快速拷贝: ```bash cp -R /path/to/source_folder/* /destination/folder/ ``` 这里 `-R` 参数表示递归复制整个树状结构下的所有项目[^3]。 #### 编写 Shell 脚本实现复杂需求 如果涉及到更加复杂的逻辑比如排除某些特定类型的文件、重命名冲突文件等情况,那么建议创建一个简单的 bash script 文件用于自动化此过程。下面给出一段示例代码片段展示如何遍历给定的数据集并将其中各个分类下的 .tar.gz 归档文件集中存放到一处: ```bash #!/bin/bash SOURCE_DIR="dataset" DESTINATION_DIR="/your/merged/directory" if [ ! -d "$DESTINATION_DIR" ]; then mkdir -p $DESTINATION_DIR fi find ${SOURCE_DIR} -type f \( -name "*.tar.gz" \) | while read file; do base_name=$(basename "${file}") mv "${file}" "${DESTINATION_DIR}/${base_name}" done ``` 上述脚本会查找名为 `dataset` 的根目录下所有的 `.tar.gz` 文件,并将它们逐一迁移到由变量 `$DESTINATION_DIR` 定义的目标地址处。注意,在实际应用之前应当调整好对应的路径名以及确认是否有权限执行这些动作[^4]。 #### 处理潜在的风险与注意事项 - **重复文件**: 如果两个或更多来源中有同名文件,默认情况下会被后者覆盖掉前者。为了避免这种情况发生可以在上面提到的脚本里加入额外判断机制。 - **符号链接**: 默认行为不会跟随软连接进入其指向的真实位置而是直接复制链接本身。可以通过增加选项改变这种默认设置。 - **隐藏文件**: 上述方法忽略了以点号开头的隐藏项。如果有必要也应考虑是否要包含这部分资源。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值