Linux - 替换文件名中的空格

Mit*_*ran 86 linux filenames command replace spaces

我在文件夹中有许多文件,我想用下划线替换所有文件名中的每个空格字符.我怎样才能做到这一点?

nee*_*esh 153

这应该这样做:

for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
Run Code Online (Sandbox Code Playgroud)

  • 当它们靠近引号时,我发现反引号有点难以阅读。相同但更具可读性的是 `for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; 完成` (5认同)

小智 61

我更喜欢使用命令'rename',它采用Perl风格的正则表达式:

rename "s/ /_/g" *
Run Code Online (Sandbox Code Playgroud)

你可以使用-n标志进行干运行:

rename -n "s/ /_/g" *
Run Code Online (Sandbox Code Playgroud)

  • fedora版本将是`rename"""_"*` (6认同)
  • 它出现的"重命名"在OSX中不可用. (4认同)
  • 如果您具有perl样式的重命名,而不是较简单的redhat / fedora,它将可以使用 (2认同)

Dig*_*oss 14

使用sh ...

for i in *' '*; do   mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Run Code Online (Sandbox Code Playgroud)

如果你想在拉动扳机之前尝试这一点,只需mv改为echo mv.


jav*_*pas 6

如果您想递归地应用替换任务怎么办?你会怎么做?

好吧,我自己找到了答案。这不是最优雅的解决方案(还尝试重命名不符合条件的文件),但它有效。(顺便说一句,就我而言,我需要用“%20”重命名文件,而不是用下划线)

#!/bin/bash
find . -type d | while read N
do
     (
           cd "$N"
           if test "$?" = "0"
           then
               for file in *; do mv "$file" ${file// /%20}; done
           fi
     )
done
Run Code Online (Sandbox Code Playgroud)


Mur*_* VP 5

如果您使用 bash:

for file in *; do mv "$file" ${file// /_}; done
Run Code Online (Sandbox Code Playgroud)