开发者

linux batch rename directories and strip # character from name

i have a directory with a lot of subdirectories with a # infront of them:

#adhasdk
#ad18237

I want to rename them all a开发者_运维问答nd remove the # caracter I tried to do:

rename -n `s/#//g` *

but didn't seem to work.

-bash: s/#//g: No such file or directory

Any ideas on this. Thanks


Just use

$ rename 's/^#//' *

use -n just to check that what you think it would happen really happens. In you example you have the clue about the wrong quotes used (backticks) in the error message

 -bash: s/#//g: No such file or directory

bash is trying to execute a command named s/#//g.

No that using g (global) and not anchoring the regular expression you will replace any #, not just the one in the first position.


I don't know whether it's just a typo when you typed it here, but that "rename" command should work if:

  1. you leave off the "-n" and
  2. you quote the substitution with regular single-quotes and not back-quotes

The "-n" tells it to not really do anything. The back-quotes are just wrong (they mean something but not what you want here).


The problem is that you use backticks (`). You should use normal quotes:

rename -n 's/#//g' *


for DIR in \#*/
do
     echo mv "$DIR" "${DIR/#\#/}"
done


I had to rename all folders inside a given folder. Each folder name had some text inside round braces. The following command removed the round braces from all folder names:

rename 's/(.+)//' *


Some distros doesn't support regexp in rename. You have to install prename. Even more, sometimes you can't install prename and you have to install gprename to have binary prename.

If you have 'prename' then just change backtick character " ` " to single quote and everything should work.

So the solution should be:

prename -n 's/#//g' *

or

prename -n 'y/#//' *
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜