Wie benenne ich mehrere Dateien um, indem ich Zeichen in Bash entferne?

10

Ich muss mehrere Dateien im Verzeichnis umbenennen, indem ich die ersten 5 Zeichen für jeden Dateinamen entferne.
Wie kann ich das machen? Ich benutze Ubuntu 11.10. Vielen Dank.

wlk
quelle

Antworten:

11

Eine einfache for-Schleife mit ein wenig sedWillen 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 sedsagt, dass fünf Zeichen ( .dh ein beliebiges Zeichen) am Anfang der Zeichenfolge ( ^) übereinstimmen und entfernt werden sollen.

James O'Gorman
quelle
9

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.

Ladadadada
quelle
5

Sie können sed verwenden, um dies zu tun

for file in * ; do mv $file  $(echo $file |sed 's/^.\{5\}//g'); done
user9517
quelle
5

Alles gute Antworten, danke. Das hat in meinem Fall funktioniert:

rename 's/^.......//g' *
wlk
quelle
0

Meine zwei Cent':

for file in *; do mv $file ${file:5}; done

${file:n}Entfernt die ersten nZeichen in der Zeichenfolge file.

dkcm
quelle