移动名称相似的文件/目录,匹配规则

移动名称相似的文件/目录,匹配规则

我们正在将大约 4TB 的文件从 OS X Server 移动到 Windows Server2 008R2。由于字符不兼容,许多文件名无法移动。我们运行了重命名工具来修复问题,然后再次复制。我现在的问题是,我有很多文件夹的名称非常相似,如“O'Neil”和“O_Neil”。事实上,据我所知,它们都符合这条规则。要手工完成的工作太多了,我正在考虑编写一个脚本,但我编写脚本的经验有限。我想比较修改日期或文件大小,然后合并或将文件夹移动到存档中,并保留一个设置。我不确定在这种情况下的最佳做法是什么。

  1. 理论上,最佳做法是什么,按日期合并,存档较小的版本?
  2. 实际上我该如何修复这个问题?有工具吗?有脚本思路吗?

非常感谢您的帮助。

答案1

这不是一个直接的问题 - 它是一个征求意见和示例脚本的请求 - 并且可能会引发大量讨论。最好发布许多小而有针对性的问题来获得答案。

无论如何,在 Mac 服务器中您可以依靠大量的命令行工具来帮助您编写脚本。

首先,您可以使用 find 列出要应用规则的所有文件/文件夹:

$> 查找“rootPathToSearchOn”-name“namingRule”-regex“betterNamingRule”

前任:

$> find . -maxdepth 1 -regex "./[a-zA-Z]*[_'][a-zA-Z]*"
./o_neil
./o'neil
...

这样,您就可以将带下划线的文件与带引号的文件区分开。然后将 find 的输出传递给“xargs”,您可以为选定的文件调用一个脚本:

$> find . -maxdepth 1 -regex "./[a-zA-Z]*[_][a-zA-Z]*" -print0 | xargs -0 -I fileName ./myScript.sh fileName

一个简单的脚本如下:

nameToTest=`echo $1 | tr "_" "'"`
if [ -e $nameToTest ];
then echo $nameToTest has a collision to $1;
fi;

应该输出类似这样的内容:

./o'neil 与 ./o_neil 发生冲突

在这种情况下,您可以用所需的操作填充“然后”块。

现在,合并的策略取决于您的场景 - 目录的创建日期并不表示其内容的日期 - 并且目录内容的文件大小总和并不表示其上的活动。

相关内容