Linux - 替换文件名中的空格

时间:2009-11-27 05:08:04

标签: linux replace command filenames spaces

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

12 个答案:

答案 0 :(得分:139)

这应该这样做:

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

答案 1 :(得分:57)

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

rename "s/ /_/g" *

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

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

答案 2 :(得分:11)

使用sh ...

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

如果您想在拉动扳机之前尝试此操作,只需将mv更改为echo mv

答案 3 :(得分:4)

如果您想要递归递归,该怎么办?你会怎么做?

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

答案 4 :(得分:3)

如果你使用bash:

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

引用你的变量:

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

删除“echo”以进行实际重命名。

答案 7 :(得分:1)

The easiest way to replace a string (space character in your case) with another string in Linux is using sed. You can do it as follows

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

Hope this helps.

答案 8 :(得分:1)

这是另一种解决方案:

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

答案 9 :(得分:0)

我相信您的答案位于 Replace spaces in filenames with underscores

答案 10 :(得分:0)

要重命名使用.py扩展名的所有文件, find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"

示例输出,

$ 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

答案 11 :(得分:0)

这会将每个文件夹中的 ' ' 替换为 '_',并且在 Linux 中使用 Python >= 3.5 递归地替换文件名。将 path_to_your_folder 更改为您的路径。

仅列出文件和文件夹:

python -c "import glob;[print(x) for x in glob.glob('path_to_your_folder/**', recursive=True)]"

将每个文件夹和文件名中的 ' ' 替换为 '_'

python -c "import os;import glob;[os.rename(x,x.replace(' ','_')) for x in glob.glob('path_to_your_folder/**', recursive=True)]"

使用 Python < 3.5,您可以安装 glob2

pip install glob2
python -c "import os;import glob2;[os.rename(x,x.replace(' ','_')) for x in glob2.glob('path_to_your_folder/**')]"