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

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

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

如何对所有带有“空格”的文件名进行批量重命名并将其替换为“_”字符。

查看其他解决方案,我尝试了以下命令,但没有成功:

查找 . -name '* *' -exec 重命名 ' ' '_' {} +

查找:重命名:没有此文件或目录

答案1

尝试:

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

答案2

没有直接的答案,但您得到的大多数结果都是错误的。最有可能的是,他们无法正确使用 find,如果任何文件名包含 ^J,您可能会得到愚蠢的结果。 

另外,如果您有大量文件,您可能不希望脚本为每个条目生成一个 sed 或 mv。

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

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

答案3

谢谢您的回答。

我发现这个方法可以解决问题:

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

相关内容