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:
- you leave off the "-n" and
- 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/#//' *
精彩评论