Beim Umbenennen von Dateien Bindestriche nach dem vierten und sechsten Zeichen hinzufügen

Beim Umbenennen von Dateien Bindestriche nach dem vierten und sechsten Zeichen hinzufügen

Ich habe einige Dateien wie:

20150716_something-here
20150716_something-heretoo
20150716_something-hereaswell

Sie müssen umbenannt werden in

2015-07-16_something-here
2015-07-16_something-heretoo
2015-07-16_something-hereaswell

Ich habe versucht, mit einemPerl-ImplementierungdesrenameBefehl(siehe meinen Kommentar zur akzeptierten Antwort), aber ich war nicht erfolgreich.

Antwort1

Verwenden der integrierten Teilzeichenfolgenerweiterung von Bash:

for f in 2015* ; do
  mv "$f" "${f::4}-${f:4:2}-${f:6}"
done

Antwort2

Mit sed:

LC_ALL=C sed -e 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1_\2_\3/' <file

Antwort3

Obwohl renamees ein sehr mächtiges Werkzeug ist, bevorzuge ich normalerweise die Einfachheit desmmv(Mehrfachbewegung) Dienstprogramm:

mmv '????????_*' '#1#2#3#4-#5#6-#7#8_#9'

Das ?im Suchmuster steht für ein einzelnes Zeichen, das *für eine beliebig lange Zeichenfolge. Im Ersetzungsmuster #<number>steht jedes für ein entsprechendes ?oder *im Suchmuster. Zusätzlich zu ?und werden *auch mmvZeichenbereiche innerhalb von Klammern unterstützt (wie [a-f]).

( mmvtestet vor Arbeitsbeginn auf etwaige Konflikte beim Umbenennen, sodass Sie nicht riskieren, Dateien durch Überschreiben zu verlieren.)

Antwort4

Auf meiner Distribution habe ich den perl-renameBefehl, der einen regulären Ausdruck im Perl-Stil verwenden kann, um Dateien massenhaft umzubenennen. Der renameBefehl akzeptiert für die Umbenennung nur ein Paar fester Zeichenfolgen.

verwandte Informationen