我请求有关一些脚本的帮助。
我有一个目录“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