多年来,我一直在使用OS X存档应用程序,该应用程序在OS X软件包中存储先前版本的文档。这个应用程序与Sierra不兼容,但我不想丢失所有文件档案。
这是文件夹结构:
Dir1
|--document_archive_1 <--has name of original document
| --doc_version_1 <--has name in form: 20160301 180206 -0800
| --doc_version_2 <--has name in form: 20151127 171422 -0800
|--document_archive_2
| --doc_version_1
|subdir1
| --document_archive_3
| subsubdir
etc.
或者,或者说,树中的每个文件夹都包含子文件夹和OS X包的组合,其中包含已存档的文档版本(没有其他内容)。该捆绑包的文件名为其归档版本所在的文档的文件名。存档包中包含名称为日期戳的文件。
我想要做的是遍历文件夹树。当我遇到存档包时,我想:
因此,例如......对于名为“letter_to_dad.doc”的Word文档,存档包名为“letter_to_dad.doc.synkarchive”,如下所示:
|letter_to_dad.doc.synkarchive
|--20160301 180206 -0800 <--this is a .doc file but has no extension
|--20151127 171422 -0800
我最终想要的是:
|folder called 'letter_to_dad'
|--letter_to_dad 20160301 180206.doc
|--letter_to_dad 20151127 171422.doc
我只做了一点Bash脚本编写,而我想要做的就是现在的头脑,所以任何帮助都会受到赞赏。我认为这不应该那么难,但我可能对此很天真......
感谢您的帮助。
答案 0 :(得分:0)
AFAIK捆绑包只是文件夹,因此以下脚本应该可以解决这个问题:
#!/usr/bin/env bash
bundle_root=${HOME}
out_root="/tmp"
function copy_bundle {
bn="$(basename "$1")"
bn=${bn%%.*}
new_dir="${out_root}/${bn}"
mkdir "${new_dir}" 2>/dev/null
rsync -a "$1" "${new_dir}"
find . -type f | xargs -I% mv % "${new_dir}/${bn}_$(echo % | sed -Ee 's,[[:space:]]+,_,g' -e 's,_(-|[[:alnum:]])+$,,')"
}
export out_root
export -f copy_bundle
find "${bundle_root}" -iname "*.bundle" -type d -exec bash -c 'copy_bundle "{}"' \;