我使用以下命令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/' *
结果是
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
* 更新 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 ' *
答案1
也可以使用一个rename
命令来实现:
rename 'y/A-B/1-2/' *
例如:-n
开关的意思是“无操作:打印要重命名的文件的名称,但不重命名。”
$ rename -n 'y/A-B/1-2/' *
rename(A, 1)
rename(B, 2)
音译?
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.
答案2
您可以插入多个转换模式,用以下分隔符分隔;
:
rename 's/1/A/; s/2/B/' *
如果您想要更改所有出现的1
和2
而不是只更改第一个,请使用g
(全局)修饰符:
rename 's/1/A/g; s/2/B/g' *
例子:
$ 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