Odpowiedzi:
Prosta pętla for z odrobiną sed
załatwi sprawę:
% 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
Substytut regex w sed
mówi dopasować jakieś pięć znaków ( .
oznacza dowolny znak) na początku łańcucha ( ^
) i usuń go.
Bash ma niesamowite możliwości tworzenia skryptów. Oto jeden ze sposobów:
for file in ??????*; do mv $file `echo $file | cut -c6-`; done
Przydatnym sposobem sprawdzenia, co by to zrobił, jest dodanie echa przed poleceniem:
for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done
Sześć znaków zapytania gwarantuje, że spróbujesz to zrobić tylko w przypadku nazw plików dłuższych niż 5 znaków.
Możesz do tego użyć sed
for file in * ; do mv $file $(echo $file |sed 's/^.\{5\}//g'); done