Antworten:
Eine einfache for-Schleife mit ein wenig sed
Willen reicht aus:
% 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
Der Ersatz- Regex in sed
sagt, dass fünf Zeichen ( .
dh ein beliebiges Zeichen) am Anfang der Zeichenfolge ( ^
) übereinstimmen und entfernt werden sollen.
Bash hat einige erstaunliche Skriptmöglichkeiten. Hier ist eine Möglichkeit:
for file in ??????*; do mv $file `echo $file | cut -c6-`; done
Eine praktische Möglichkeit, um zu testen, was dies tun würde , besteht darin, vor dem Befehl ein Echo hinzuzufügen:
for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done
Die sechs Fragezeichen stellen sicher, dass Sie dies nur bei Dateinamen versuchen, die länger als 5 Zeichen sind.