根据后缀合并目录

根据后缀合并目录

我有一个在归档过程中生成的目录结构。存档系统无法更改。每当出现重复目录时,归档程序都会在目录名称后附加一个整数后缀。我的目标是折叠这些目录,以便每个名称只有一个目录(无后缀)并且子目录被合并。

# Current Structure
/
+-- Folder_Name/
    +-- 20170913/
        +-- File One
+-- Folder_Name_1/
    +-- 20170913/
        +-- File One
        +-- File Two
+-- Folder_Name_2/
    +-- 20170915/
        +-- File Three
+-- Folder_Name_3/
    +-- 20170918/
        +-- File Four

# What I would like to achieve
/
+-- Folder_Name/
    +-- 20170913/
        +-- File One
        +-- File Two
    +-- 20170915/
        +-- File Three
    +-- 20170918/
        +-- File Four

归档过程中会创建大量文件夹(这是一台超声波机器,每月保存所有图像的备份),并且经常会产生重复项。同时,我使用 ImageMagick 将位图文件转换为 png,以减小文件大小。

我尝试rsync使用 --remove-source-files 选项来执行此操作,但我一直无法找到匹配这些目录的方法rsync (我认为它不支持正则表达式)。然后我尝试使用find管道将输出输入,rsync但无法计算出a)可以实现这一点的正则表达式; b) 如何提供带后缀和不带后缀的目录名称。我想我需要为此使用变量,但我对 shell 脚本编写没有经验。

我在这里采取的方法正确吗?如果是这样,有人可以向我指出可以引导我完成设置的资源或教程吗?如果不是,那么我应该考虑使用什么工具?

答案1

我很确定一个简单的

cp -R Folder_Name_*/* Folder_Name

将为您完成所有合并。检查结果后,您可以删除源目录。

如果您有多个文件夹要合并,请for围绕它构建一个循环:

for folder in *_1; do
  folder="${folder%_*}"
  cp -R "$folder"_* "$folder"
  # rm -rf "$folder"_*
done

rm已注释掉,直至验证)

相关内容