根据 .md5 文件移动目录以恢复原始目录结构

根据 .md5 文件移动目录以恢复原始目录结构

我请求有关一些脚本的帮助。

我有一个目录“J:\To_Sort”,其中包含另外 1164 个目录。在“To_Sort”目录中,我还有 37 个 *.md5 文件。这些 MD55 文件包含每个文件和目录的校验和和原始路径。它们被命名为:

  • 选定的目录-01.md5
  • 选定的目录-02.md5
  • ETC

我想根据.md5 文件恢复目录结构。 所以我会得到类似的东西:

  • J:\To_Sort\Selected-Dir-01\此处原本的所有目录和文件
  • J:\To_Sort\Selected-Dir-02\此处原本的所有目录和文件
  • J:\To_Sort\Selected-Dir-03\此处原本的所有目录和文件

以下是 md5 文件的内容:

D754CEE4296B03062E53EA0FF7859F53 *photos\Foley_At_141_-_14-04-2009\small-psd\DSC_7975 copy.psd

第一部分是校验和,后面跟着一个空格。然后是星号,表示目录结构和文件路径的开始。CR 表示 MD5 文件中的新行。MD5 文件由FastSum 命令行版本

我发现了一些东西这里这可能会导致解决方案。(我不太熟悉 Ruby,但现在我正在剖析代码。)

我开始思考解决方案,但我认为我把它复杂化了。(在 UltraEdit 中编写一个宏来从 .md5s 中删除 CRC 值,用目标目录路径替换星号,然后编写一个批处理文件……我确信有更好的解决方案。)

我有 OS X Snow Leo(带有 Xcode)和 Windows XP Home。

编辑: 正如 codelahoma 非常正确指出的那样,我忘了提及文件名和文件夹结构是完整的。(它们与 .MD5 文件中列出的相同)

这是原始结构(我想恢复它):

J:\To_Sort\Selected-Dir-01\photos\Foley_At_141_-_14-04-2009\small-psd\DSC_7975 copy.psd

这是当前的结构:

J:\To_Sort\photos\Foley_At_141_-_14-04-2009\small-psd\DSC_7975 copy.psd

文件名和扩展名中允许的字符:符合 ISO9660/Joliet(模式 2)标准。

我将永远感激这个解决方案!

答案1

awk 'BEGIN { FS=" \\*|\\\\" }
           { print gensub(".md5","", "1", FILENAME) "\\" $2 }' *.md5 |
  sort -u |
  while read -r line; do echo mv "${line#*\\}" "${line%\\*}"; done

您提供的示例数据的输出:

mv photos selected-dir-01

如果输出看起来不错,请从“mv”之前删除“echo”。

编辑:哦,当然还要创建要移动内容的目录:

for f in *.md5;do mkdir "${f%.md5}";done

相关内容