Відповіді:
Простий цикл з трохи 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 символів.