我已经阅读并尝试了许多答案,了解如何在嵌套目录结构中重命名带空格的文件。但是,它们似乎不适用于我的情况。他们都是段错误。
我在32,768个目录的目录结构中只有1,000,000个文件。这也是在Windows(Server 2008 R2)上,我正在运行MINGW32给我Bash 3.1。
目录在00/00 / file1 01/00 / file2之类的结构中,其中每个子目录" series"从00到zz不等。我相信目录结构只有两层深,但我可能是错的。从Windows资源管理器"属性"生成文件计数大约需要45分钟。
我认为这里发布的答案是segfaulting,因为它们正在耗尽内存构建或走这些目录。这是我在发布之前的最后一次尝试:
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
在哪里可以看到我的版本只是其他帖子的答案嵌入在外部查找循环中。但是,这也是段错误。我想尝试这个,因为在一个目录级别工作时尝试上述解决方案。
答案 0 :(得分:3)
创建此shell脚本,例如./move.sh:
#!/bin/bash
echo mv "$1" "${1// /_}"
让它可执行。
执行命令
find . -depth -name '* *' -exec ./move.sh "{}" \;
如果输出正常,请从./move.sh
中删除echo