重命名文件以将空格更改为下划线

joh*_*ohn 10 linux rename files

我有很多在 MS Windows 中创建的文件(mp3、wav、txt、doc),它们的名称中有空格。例如The file of whoever.doc

我想一次重命名它们,用下划线或点替换空格。

Jef*_*ler 22

shell 可以很容易地做到这一点(这里假设操作员使用 ksh93、zsh、bash、mksh、yash 或(某些构建的)busybox sh ${var//pattern/replacement}):

for file in *.doc *.mp3 *.wav *.txt
do
  mv -- "$file" "${file// /_}"
done
Run Code Online (Sandbox Code Playgroud)

更改*.doc... glob 以匹配您有兴趣重命名的任何文件。

要重命名当前目录中所有文件名中当前包含空格的文件:

for file in *' '*
do
  mv -- "$file" "${file// /_}"
done
Run Code Online (Sandbox Code Playgroud)

您还可以考虑添加“clobber”检查:

for file in *' '*
do
  if [ -e "${file// /_}" ]
  then
    printf >&2 '%s\n' "Warning, skipping $file as the renamed version already exists"
    continue
  fi

  mv -- "$file" "${file// /_}"
done
Run Code Online (Sandbox Code Playgroud)

或者使用mv's-i选项在覆盖文件之前提示用户。


Aus*_*arn 7

除了已经提到的内容之外,排毒计划可能也引起一些兴趣。它是专门为执行此类操作而设计的,并且可以处理除空间之外的许多内容。如果文件名中没有任何变音符号、括号或其他奇怪的东西,那么如果在目录树的顶部运行,以下内容应该完全符合您的要求:

detox -r .
Run Code Online (Sandbox Code Playgroud)

请注意,这也会修复目录的名称,因此不要在UsersWindows 系统的目录上运行它,否则您可能会破坏东西(Windows 需要用户目录中的某些文件夹具有特定名称,这将更改这些文件夹)文件夹名称)。


iga*_*gal 4

您可以使用sed,例如:

mv -i "${original_file}" "$(echo "${original_file}" | sed 's/ /_/g')"
Run Code Online (Sandbox Code Playgroud)

这是一个例子。

创建一个名称中包含空格的文件:

mv -i "${original_file}" "$(echo "${original_file}" | sed 's/ /_/g')"
Run Code Online (Sandbox Code Playgroud)

重命名文件:

touch "/tmp/test file with spaces"
Run Code Online (Sandbox Code Playgroud)

这是文件的新名称:

test_file_with_spaces
Run Code Online (Sandbox Code Playgroud)

你可以做同样的事情tr,即:

mv -i "${original_file}" "$(echo "${original_file}" | tr ' ' _)"
Run Code Online (Sandbox Code Playgroud)

或者使用 Bash 子字符串替换:

mv -i "${original_file}" "${original_file// /_}"
Run Code Online (Sandbox Code Playgroud)

或者使用rename命令:

rename "s/ /_/g" "${original_file}"
Run Code Online (Sandbox Code Playgroud)