更改目录中多个文件的部分文件名:

iva*_*van 8 rename

我曾经有一个脚本可以执行以下操作。它将重命名当前目录中多个文件的文件名的一部分:

例如:

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”中执行此操作。因此,在任何给定的目录中,我都会从命令行重命名文件名的中间部分。它可能有数百个文件。希望这是有道理的,谢谢伊万

hee*_*ayl 8

仅使用 shell,使用参数扩展:

for f in *456*; do echo mv -i -- "$f" "${f//456/555}"; done
Run Code Online (Sandbox Code Playgroud)

这里我们重新迭代456名称中包含的文件,参数扩展模式${f//456/555}456555.

上面将通过显示mv将运行什么命令来进行空运行,您可以删除echo以让操作发生:

for f in *456*; do mv -i -- "$f" "${f//456/555}"; done
Run Code Online (Sandbox Code Playgroud)

renameprename):

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)


Zac*_*ady 0

您似乎忘记将文件传递给rename.

rename 456 555 *456*
Run Code Online (Sandbox Code Playgroud)