hol*_*lms 39 files shell rename sed
将 ACDC 替换为 AC-DC
例如我们有这些文件
ACDC - 摇滚乐不是噪音污染.xxx
ACDC - Rocker.xxx
ACDC - Shoot To Thrill.xxx
我希望他们成为:
AC-DC - 摇滚乐不是噪音污染.xxx
AC-DC - Rocker.xxx
AC-DC - 惊险刺激.xxx
我知道 sed 或 awk 用于此操作。我无法用谷歌搜索任何东西,所以我在寻求你的帮助 =) 你能为此任务提供完整的 shell 命令吗?
反馈:OSX 用户的解决方案
Joe*_*l K 51
rename 's/ACDC/AC-DC/' *.xxx
Run Code Online (Sandbox Code Playgroud)
从 man rename
DESCRIPTION
"rename" renames the filenames supplied according to the rule specified as the
first argument. The perlexpr argument is a Perl expression which is expected to modify the
$_ string in Perl for at least some of the filenames specified. If a given filename is not
modified by the expression, it will not be renamed. If no filenames are given on
the command line, filenames will be read via standard input.
Run Code Online (Sandbox Code Playgroud)
例如,要重命名与“*.bak”匹配的所有文件以去除扩展名,您可能会说
rename 's/\.bak$//' *.bak
Run Code Online (Sandbox Code Playgroud)
要将大写名称转换为小写,您可以使用
rename 'y/A-Z/a-z/' *
Run Code Online (Sandbox Code Playgroud)
use*_*686 15
这个答案包含了所有其他答案的优点,同时省略了诸如ls | while read.
当前目录:
for file in ACDC*.xxx; do
mv "$file" "${file//ACDC/AC-DC}"
done
Run Code Online (Sandbox Code Playgroud)
包括子目录:
find . -type f -name "ACDC*" -print0 | while read -r -d '' file; do
mv "$file" "${file//ACDC/AC-DC}"
done
Run Code Online (Sandbox Code Playgroud)
换行符是真的不太可能的文件名,所以这可以更简单,同时还包含空格的名称的工作:
find . -type f -name "ACDC*" | while read -r file; do
mv "$file" "${file//ACDC/AC-DC}"
done
Run Code Online (Sandbox Code Playgroud)
Den*_*son 13
要使用renamePhil 提到的 util-linux 版本(在 Ubuntu 上,它被称为rename.ul):
rename ACDC AC-DC ACDC*
Run Code Online (Sandbox Code Playgroud)
或者
rename.ul ACDC AC-DC ACDC*
Run Code Online (Sandbox Code Playgroud)