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

有帮助吗?

解决方案

这应该这样做:

for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done

其他提示

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

rename "s/ /_/g" *

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

rename -n "s/ /_/g" *

使用sh ...

for i in *' '*; do   mv "$i" `echo $i | sed -e 's/ /_/g'`; done

如果您想在拉动扳机之前尝试此操作,只需将 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

如果你使用bash:

for file in *; do mv "$file" ${file// /_}; done

引用你的变量:

for file in *; do echo mv "'$file'" "${file// /_}"; done

删除“echo”做实际的重命名。

尝试这样的事情,假设你的所有文件都是.txt:

for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done

Linux 中的另一个字符串替换字符串(在您的情况下为空格字符)的最简单方法是使用 sed 。您可以按照以下方式执行此操作

sed -i 's/\s/_/g' *

希望这有帮助。

这是另一种解决方案:

ls | awk '{printf("\"%s\"\n", <*>)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
  1. 使用awk在文件名称周围添加引号
  2. 使用sed用下划线替换空格;用引号打印原始名称(来自awk);然后是替代名称
  3. xargs一次取2行并将其传递给mv

我相信你的回答是在 使用下划线替换文件名中的空格

要使用 .py 扩展名重命名所有文件, <代码> 找 。 -iname“*。py” -type f | xargs -I%rename&quot; s / / _ / g&quot; &QUOT;%&QUOT;

示例输出,

$ find . -iname "*.py" -type f                                                     
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f                                                     
./Sample/Sample_File.py
./Sample_File.py
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top