我有一个在归档过程中生成的目录结构。存档系统无法更改。每当出现重复目录时,归档程序都会在目录名称后附加一个整数后缀。我的目标是折叠这些目录,以便每个名称只有一个目录(无后缀)并且子目录被合并。
# 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
已注释掉,直至验证)