我有很多在 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 .
请注意,这也会修复目录的名称,因此不要在Users
Windows 系统的目录上运行它,否则您可能会破坏东西(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