112

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

4

11 回答 11

199

这应该这样做:

for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
于 2009-11-27T05:42:03.087 回答
86

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

rename "s/ /_/g" *

您可以使用 -n 标志进行试运行:

rename -n "s/ /_/g" *
于 2009-11-27T05:45:07.520 回答
17

使用嘘...

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

如果您想在扣动扳机之前尝试一下,只需更改mvecho mv.

于 2009-11-27T05:39:49.080 回答
5

如果你使用 bash:

for file in *; do mv "$file" ${file// /_}; done
于 2009-11-27T05:24:38.563 回答
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
于 2010-04-02T20:33:16.933 回答
3

这是另一个解决方案:

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

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

for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
于 2009-11-27T05:21:03.717 回答
1

引用你的变量:

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

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

于 2009-11-27T05:42:49.383 回答
0

用另一个字符串替换字符串(在您的情况下为空格字符)的最简单方法Linux是使用sed. 你可以这样做

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

希望这可以帮助。

于 2016-12-09T13:03:53.217 回答
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
于 2018-04-07T09:21:38.517 回答
0

这将在 Python >= 3.5 的 Linux 中递归替换' '每个'_'文件夹和文件名。改变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/**')]"
于 2021-02-09T23:04:31.273 回答