我曾经有一个脚本可以执行以下操作。它将重命名当前目录中多个文件的文件名的一部分:
例如:
rename variable1 variable2
rename 456 555
Run Code Online (Sandbox Code Playgroud)
输入:
testa456testa
sama456sama
apple456applea
johna_456_johna
davida_456_davidb
Run Code Online (Sandbox Code Playgroud)
输出:
testa555testa
sama555sama
apple555applea
johna_555_johna
davida_555_davidb
Run Code Online (Sandbox Code Playgroud)
我不再有脚本了,而且我对 Unix 还很陌生。我需要一个可以从命令行使用的脚本。
我现在做的是:
我将文件“ls *(文件名)”列出为临时文件名。然后我搜索%/s/456/555/g。然后我将所有旧文件名移动到新文件名。我能够在命令行“将 $1 重命名为 $2”中执行此操作。因此,在任何给定的目录中,我都会从命令行重命名文件名的中间部分。它可能有数百个文件。希望这是有道理的,谢谢伊万
仅使用 shell,使用参数扩展:
for f in *456*; do echo mv -i -- "$f" "${f//456/555}"; done
Run Code Online (Sandbox Code Playgroud)
这里我们重新迭代456
名称中包含的文件,参数扩展模式${f//456/555}
将456
用555
.
上面将通过显示mv
将运行什么命令来进行空运行,您可以删除echo
以让操作发生:
for f in *456*; do mv -i -- "$f" "${f//456/555}"; done
Run Code Online (Sandbox Code Playgroud)
和rename
(prename
):
rename -n 's/456/555/g' *456*
Run Code Online (Sandbox Code Playgroud)
这会将文件名中的所有 ( g
)456
子字符串替换为555
( s/456/555/
)。
-n
将进行空运行,如果您对所做的更改感到满意,请删除-n
以进行实际的重命名:
rename 's/456/555/g' *456*
Run Code Online (Sandbox Code Playgroud)