用下划线replace文件名中的“空格”字符

我在文件名中有一堆“空格”的目录中有一堆文件。

如何用“空格”对所有文件名执行批量重命名,并用“_”字符replace它们。

看看其他的解决scheme,我已经尝试了以下命令w / o成功:

找 。 -name'* *'-exec rename'''_'{} +

find:重命名:没有这样的文件或目录

尝试:

 $ for file in *; do [ -f "$file" ] && ( mv "$file" "$(echo $file | sed -e 's/ /_/g')" ); done 

没有直接的答案,但是大多数人会以这种或那种方式错误的。 最有可能的是,他们不会使用正确的查找,如果任何文件名包含^ J,你可能会得到愚蠢的结果。

另外如果你有/许多/文件,你可能不希望你的脚本为每个条目产生sed或mv。

以下是使用基本Perl正确执行的一种方法:

 find . -print0 | \ perl -e '$/="\000";' -ne '$o=$_;tr/ /_/;rename($o,$_);' 

感谢您的答案。

我发现这一个class轮,做了诀窍:

 for i in *\ *; do if [ -f "$i" ]; then mv "$i" ${i// /_}; fi; done