【发布时间】:2011-05-15 04:37:02
【问题描述】:
我正在尝试使用 shell 脚本将所有目录和文件重命名为大写。我有什么作品,但不适用于子目录。由于在脚本执行期间目录名称发生变化,我得到类似mv: cannot stat './def/two/three': No such file or directory
我已经尝试将-depth 与 find 一起使用,这样它就会从下往上重命名。但仍然遇到同样的问题。我虽然想使用cut 来分解/ 上的路径并重命名,但我不知所措。
这是我所拥有的:
for i in `find . -name "*[a-z]*"`
do new_name=`echo $i | tr '[a-z]' '[A-Z]'`
mv $i $new_name
done
我会很感激任何方向,因为我觉得这应该是一项常见的任务,但未能从一些 Google 搜索中找到可行的解决方案。
请注意,我不能使用rename,因为我的发行版不支持它。
【问题讨论】:
-
我建议转移到超级用户。
-
如果你有 Perl,
rename是一个非常简单的 Perl 脚本。您可以使用它来代替二进制文件(它没有那么强大)。 SO上有很多关于重命名文件和目录的问题,甚至还有一些关于这样做depth-first。
标签: shell