Ответы:
Простой цикл for с небольшим количеством sed
добьется цели:
% touch xxxxx{foo,bar,baz}
% ls -l xxxxx{foo,bar,baz}
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 xxxxxbar
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 xxxxxbaz
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 xxxxxfoo
% for file in xxxxx*; do mv $file $(echo $file | sed -e 's/^.....//'); done
% ls -l foo bar baz
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 bar
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 baz
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 foo
Заменить регулярное выражение в sed
говорит , чтобы соответствовать любые пять символов ( .
любые символы) в начале строки ( ^
) и удалить его.
У Bash есть несколько удивительных возможностей написания скриптов. Вот один из способов:
for file in ??????*; do mv $file `echo $file | cut -c6-`; done
Удобный способ проверить, что он будет делать, - добавить эхо перед командой:
for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done
Шесть вопросительных знаков гарантируют, что вы пытаетесь сделать это только для имен файлов длиннее 5 символов.