关于使用命令重命名的问题

Fat*_*ind 5 command-line rename batch-rename

我使用命令rename同时重命名多个文件如下

但是我如何在同一个命令中进行多个更改

即改变1 to A和改变2 to B

* 更新 1 *

我使用以下案例进行测试,但出现错误

touch {1..100}
rename 's/0/A/; s/1/B/; s/2/C/; s/3/D/; s/4/E/; s/5/F/; s/6/G/; s/7/H/;s/8/I/; s/9/J/' *
Run Code Online (Sandbox Code Playgroud)

结果是

ls 
B    BE  C   CF  D3  DG  EA  EH  FB  FI  GC  GJ  HD  I   IE  J9  JF
B1   BF  C2  CG  DA  DH  EB  EI  FC  FJ  GD  H   HE  I8  IF  JA  JG
BA   BG  CA  CH  DB  DI  EC  EJ  FD  G   GE  H7  HF  IA  IG  JB  JH
BA0  BH  CB  CI  DC  DJ  ED  F   FE  G6  GF  HA  HG  IB  IH  JC  JI
BC   BI  CD  CJ  DE  E   EF  F5  FG  GA  GH  HB  HI  IC  IJ  JD
BD   BJ  CE  D   DF  E4  EG  FA  FH  GB  GI  HC  HJ  ID  J   JE
Run Code Online (Sandbox Code Playgroud)

* 更新 2 *

要解决这个问题,我必须使用 /g 。即 11 应该是 BB 但要这样做 /g 是必需的,否则只会更改第一个数字

所以正确的命令是

rename 's/0/A/g; s/1/B/g; s/2/C/g; s/3/D/g; s/4/E/g; s/5/F/g; s/6/G/g; s/7/H/g; s/8/I/g ; s/9/J/g ' *
Run Code Online (Sandbox Code Playgroud)

A.B*_*.B. 6

这也可以通过使用一个rename命令来实现:

rename 'y/A-B/1-2/' *
Run Code Online (Sandbox Code Playgroud)

示例:-n开关表示“无操作:打印要重命名的文件名,但不重命名”。

$ rename -n 'y/A-B/1-2/' *
rename(A, 1)
rename(B, 2)
Run Code Online (Sandbox Code Playgroud)

音译?

y/SEARCHLIST/REPLACEMENTLIST/cdsr

Transliterates all occurrences of the characters found in the search list
with the corresponding character in the replacement list. It returns the
number of characters replaced or deleted.
Run Code Online (Sandbox Code Playgroud)

来源

  • @FatMind 这只是 `y///` 命令的名称:http://perldoc.perl.org/functions/y.html (2认同)

hee*_*ayl 4

您可以插入多个转换模式,并用 分隔;

rename 's/1/A/; s/2/B/' *
Run Code Online (Sandbox Code Playgroud)

如果要更改所有出现的12而不仅仅是第一个,请使用g(global) 修饰符:

rename 's/1/A/g; s/2/B/g' *
Run Code Online (Sandbox Code Playgroud)

例子:

$ ls -1
1234
4321
foo12bar
spam23egg
test

$ rename -n 's/1/A/; s/2/B/' *
1234 renamed as AB34
4321 renamed as 43BA
foo12bar renamed as fooABbar
spam23egg renamed as spamB3egg

$ rename 's/1/A/; s/2/B/' *

$ ls -1
43BA
AB34
fooABbar
spamB3egg
test
Run Code Online (Sandbox Code Playgroud)