用非常大的目录结构重命名文件

我已经阅读并且尝试了很多关于如何用嵌套目录结构中的空格重命名文件的答案。 但是,他们似乎不适合我的情况。 他们都是段错误。

我只有一个目录结构为32,768个目录的1,000,000个文件。 这也是在Windows(Server 2008 R2)上,我正在运行MINGW32给我Bash 3.1。

这些目录在像00/00 / file1 01/00 / file2这样的结构中,其中每个子目录“series”从00到zz不等。 我相信目录结构只有2层深,但我可能是错的。 从Windows资源pipe理器的“属性”生成一个文件计数大约需要45分钟。

我认为这里发布的答案是segfaulting,因为他们正在build立或行走这些目录的内存不足。 这是张贴之前的最后一次尝试:

find . -maxdepth -1 -mindepth 1 -type -d -printf '%p\n' | while IFS= read -rg; do find "$g" -depth -name '* *' | while IFS= read -rf ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr ' ' _) done done 

我最后一次尝试尝试进入至less第一级的子目录,然后从这个主题的另一个post使用此解决scheme:

 find . -depth -name '* *' | while IFS= read -rf ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr ' ' _) done 

在哪里可以看到我的版本就是embedded到外部查找循环中的其他post的答案。 不过,这也是段错误。 我想这样做是因为在一个目录级别工作时尝试上述解决scheme。

创建这个shell脚本例如./move.sh:

 #!/bin/bash echo mv "$1" "${1// /_}" 

使其可执行。

跑:

 find . -depth -name '* *' -exec ./move.sh "{}" \; 

如果输出正常,请从./move.sh中删除echo