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

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

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

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

答案1

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

for file in *.doc *.mp3 *.wav *.txt
do
  mv -- "$file" "${file// /_}"
done

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

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

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

您还可以考虑添加“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

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

答案2

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

detox -r .

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

答案3

您可以使用sed,例如:

mv -i "${original_file}" "$(echo "${original_file}" | sed 's/ /_/g')"

这是一个例子。

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

touch "/tmp/test file with spaces"

重命名文件:

mv -i \
"/tmp/test file with spaces" \
"$(echo "/tmp/test file with spaces" | sed 's/ /_/g')"

这是文件的新名称:

test_file_with_spaces

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

mv -i "${original_file}" "$(echo "${original_file}" | tr ' ' _)"

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

mv -i "${original_file}" "${original_file// /_}"

或者使用rename命令:

rename "s/ /_/g" "${original_file}"

答案4

Austin Hemmelgarn 上面给出了正确答案,请使用:

    detox -r .

在运行命令预览之前,要使用 如下detox选项进行更改:-n

    detox -n -r .

detox从主目录作为起点运行命令,并排除所有隐藏文件和目录,并排除特定目录(timeshift例如目录),请使用以下形式:

find ~ -path '*/\.*' -prune -o -path */timeshift/* -prune -o -exec detox -n {} \;

要实际运行上述命令,请删除-n

相关内容