寻找 Bash 循环命令重命名文件目录,在破折号前后插入空格
Looking for a Bash loop command to rename a directory of files, inserting a whitespace before and after a dash
我有一个包含以下文件的目录:
01-artist name-song name 1.mp3
02-artist name-song name 2.mp3
03-artist name-song name 3.mp3
etc.
我正在寻找一个循环命令来重命名文件,因此它们变成:
01 - artist name - song name 1.mp3
02 - artist name - song name 2.mp3
03 - artist name - song name 3.mp3
etc.
基本上,我需要在每个破折号前后插入一个空格。
谢谢你的帮助。
在简单的 bash
中,一个 for
循环就可以完成工作:
for file in ./*-*.mp3; do mv "$file" "${file//-/ - }"; done
使用 ${file//-/ - }
,参数 file
扩展中的所有 -
实例都替换为 -
。请注意,上面的代码片段将在 -
周围插入空格,即使它已经插入空格也是如此。如果不需要,可以使用下面的代码。
#!/bin/bash
shopt -s extglob
for file in ./*-*.mp3; do
newname=${file//-/ - }
newname=${newname//+([[:blank:]])/ }
[[ $file != "$newname" ]] && mv "$file" "$newname"
done
参数展开${newname//+([[:blank:]])/ }
用来挤空格。这需要设置 extglob
选项。
使用 Perl 的独立 rename
或 prename
命令:
rename -n 's/-/ - /g' *.mp3
输出:
rename(01-artist name-song name 1.mp3, 01 - artist name - song name 1.mp3)
如果一切正常,请删除 -n
。
我有一个包含以下文件的目录:
01-artist name-song name 1.mp3
02-artist name-song name 2.mp3
03-artist name-song name 3.mp3
etc.
我正在寻找一个循环命令来重命名文件,因此它们变成:
01 - artist name - song name 1.mp3
02 - artist name - song name 2.mp3
03 - artist name - song name 3.mp3
etc.
基本上,我需要在每个破折号前后插入一个空格。 谢谢你的帮助。
在简单的 bash
中,一个 for
循环就可以完成工作:
for file in ./*-*.mp3; do mv "$file" "${file//-/ - }"; done
使用 ${file//-/ - }
,参数 file
扩展中的所有 -
实例都替换为 -
。请注意,上面的代码片段将在 -
周围插入空格,即使它已经插入空格也是如此。如果不需要,可以使用下面的代码。
#!/bin/bash
shopt -s extglob
for file in ./*-*.mp3; do
newname=${file//-/ - }
newname=${newname//+([[:blank:]])/ }
[[ $file != "$newname" ]] && mv "$file" "$newname"
done
参数展开${newname//+([[:blank:]])/ }
用来挤空格。这需要设置 extglob
选项。
使用 Perl 的独立 rename
或 prename
命令:
rename -n 's/-/ - /g' *.mp3
输出:
rename(01-artist name-song name 1.mp3, 01 - artist name - song name 1.mp3)
如果一切正常,请删除 -n
。