我的目录中有一堆文件,文件名中带有“空格”。
如何对所有带有“空格”的文件名进行批量重命名并将其替换为“_”字符。
查看其他解决方案,我尝试了以下命令,但没有成功:
查找 . -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