1

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

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

这些目录位于类似 00/00/file1 01/00/file2 的结构中,其中每个子目录“系列”从 00 到 zz 不等。我相信目录结构只有两层深,但我可能是错的。从 Windows 资源管理器的“属性”生成文件计数大约需要 45 分钟。

我认为此处发布的答案存在段错误,因为它们的内存构建或遍历这些目录的内存不足。这是我在此处发布之前的最后一次尝试:

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

我最后一次尝试尝试至少进入第一级子目录,然后使用有关该主题的另一篇文章中的此解决方案:

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

您可以在哪里看到我的版本只是嵌入在外部查找循环中的其他帖子的答案。但是,这也是段错误。我想尝试一下,因为在一个目录级别工作时尝试上述解决方案。

4

1 回答 1

3

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

#!/bin/bash

echo mv "$1" "${1// /_}"

使其可执行。

跑:

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

如果输出没问题,echo从 ./move.sh中删除

于 2014-08-30T19:26:06.293 回答