在 Dropbox 的高级设置中查找时,我丢失了一个文件夹。大约一个月后我才发现这一点。我设法从 Dropbox 找回了这个文件夹,但是子文件夹的文件结构发生了巨大变化。当前文件夹现在包含每个原始子文件夹的两个版本。目前它看起来像这样:
folder
/folder1
/folder11
/folder111
/Folder111
/file1111
/file1112
/file1113
/Folder11
/file111
/file112
/folder12
/Folder12
/folder2
/folder3
所以我有小写子文件夹和 BumpyCase 子文件夹。小写子文件夹包含子子文件夹,BumpyCase 子文件夹包含文件。子子文件夹再次包含其各自子文件夹的小写字母和 BumpyCase 版本。这个故事有几个层次的深度。
幸运的是,文件中没有重复,只有文件夹中没有重复(字母相同但大小写不同)。因此,在每个级别上,我需要合并仅名称大小写不同的文件夹。为了正确地做到这一点,我需要从最深层开始,直到顶层文件夹。
我希望所有内容都进入 CamelCase 目录。
数据所在的分区是Ext4分区。我可以访问多个 NTFS 分区。
是否有方便的 Linux 命令/工具或者有人有一个可以完成此任务的脚本的想法?我已经很高兴我拿回了我的东西,但目前的结构带来了很大的不便。
答案1
我遇到了同样的问题并找到了一个实用的解决方案。
只需转到您的 Dropbox 帐户并用小写名称重命名您的根文件夹,然后再次下载即可!
我读别处Dropbox 存在文件夹和不区分大小写的问题。我不确定文件夹名称大写是否是唯一的问题。除了大写字母的文件夹之外,我还遇到了其他可能影响 Dropbox 文件系统的问题,例如从 Mac 共享文件夹并尝试在 Ubuntu 计算机中下载它们。但我发现的问题与这里报告的问题类似。所有文件夹在网络服务器上都可以正确看到,但是下载时,所有以大写字母开头的文件夹都被复制,一些内容进入大写字母文件夹,一些内容进入小写字母文件夹,所以我正在寻找一种方法来合并这些文件夹文件夹。
答案2
所有命令都从顶级目录开始,并假设文件名中没有换行符。我假设使用 GNU 工具(Linux 或 Cygwin)。警告,这都是未经测试的代码,直接输入到浏览器中。
将所有目录合并为小写相当容易。一种方法是递归所有目录并将它们合并到相应的小写目录中。首先进行遍历深度,以便当您合并两个目录时,它们的内容已经标准化。
find . -depth -name '*[[:upper:]]*' -type d -execdir sh -c '
source=$0
target=$(echo "$source" | tr "[:upper:]" "[:lower:]")
if [ "$source" != "$target" ]; then # need to rename or merge
if [ -d "$target" ]; then
# merge $source (mixed- or uppercase) into $target (lowercase)
find "$source" -mindepth 1 -maxdepth 1 -exec mv -bt "$target" {} +
rmdir "$source"
else
mv "$source" "$target"
fi
fi
' {} \;
如果要从小写合并为混合大小写,需要确定每个小写目录对应的混合大小写目录。如果有多个目录,以下代码片段会选择一个任意大小写混合的目录。
find . -depth ! -name '*[[:upper:]]*' -type d -execdir sh -c '
source=$0
target=$(find . -maxdepth 1 -iname "$source" -not -name "$source" -print -quit)
if [ -n "$target" ]; then …
fi
' {} \;