Linux – replace文件名中的空格

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

这应该做到这一点:

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

我更喜欢使用命令“rename”,它采用Perl风格的正则expression式:

 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

如果你想recursion地应用replace任务呢? 你会怎么做?

好吧,我自己find了答案。 没有最优雅的解决scheme(试图重命名也不符合条件的文件),但工程。 (顺便说一句,在我的情况下,我需要用'%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 

引用你的variables:

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

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

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

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

我相信你的答案是用下划线replace文件名中的空格

Linux中用另一个stringreplacestring(在你的情况下的空格字符)最简单的方法是使用sed 。 你可以这样做,如下所示

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

希望这可以帮助。

我试图运行这个脚本https://hastebin.com/xemitireri.bash

 #!/bin/bash # https://stackoverflow.com/questions/1806868/linux-replacing-spaces-in-the-file-names find . -type d | while read N do ( cd "$N" if test "$?" = "0" then for file in *; do mv "$file" ${file// /_}; done fi ) done 

我想recursion运行,在一个文件夹,其中有多个文件夹,其中每个文件夹中有多个文件。 文件夹名称和文件名称中都有空格(例如,在包含“磁盘1”,“磁盘2”等“Good Album”的文件夹“Testing”上运行。每个磁盘的文件夹都有“Song 1 .txt“,”Song 2.txt“,”Song 3.txt等),这个DID重命名文件夹,但不是文件夹里面的文件我收到错误bash:cd:./Disk 02:没有这样的文件或目录bash:cd:./Disk 01:没有这样的文件或目录bash:cd:./Disk 03:没有这样的文件或目录