nee*_*esh 153
这应该这样做:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
Run Code Online (Sandbox Code Playgroud)
小智 61
我更喜欢使用命令'rename',它采用Perl风格的正则表达式:
rename "s/ /_/g" *
Run Code Online (Sandbox Code Playgroud)
你可以使用-n标志进行干运行:
rename -n "s/ /_/g" *
Run Code Online (Sandbox Code Playgroud)
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
.
如果您想递归地应用替换任务怎么办?你会怎么做?
好吧,我自己找到了答案。这不是最优雅的解决方案(还尝试重命名不符合条件的文件),但它有效。(顺便说一句,就我而言,我需要用“%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)
如果您使用 bash:
for file in *; do mv "$file" ${file// /_}; done
Run Code Online (Sandbox Code Playgroud)