116 Stimmen

Umbenennung eines Teils eines Dateinamens

Ich habe viele Dateien, die wie folgt aussehen:

DET01-ABC-5_50-001.dat
...
DET01-ABC-5_50-0025.dat

und ich möchte, dass sie so aussehen:

DET01-XYZ-5_50-001.dat
...
DET01-XYZ-5_50-0025.dat

Wie kann ich das tun?

194voto

Paul Dixon Punkte 286600

Es gibt eine Reihe von Varianten eines Umbenennungsbefehls, in Ihrem Fall könnte es so einfach sein wie

rename ABC XYZ *.dat

Möglicherweise haben Sie eine Version, die einen Perl-Regex verwendet;

rename 's/ABC/XYZ/' *.dat

169voto

RJ Alten Punkte 1882
for file in *.dat ; do mv $file ${file//ABC/XYZ} ; done

Non rename o sed benötigt. Einfach bash Parametererweiterung .

9voto

paxdiablo Punkte 809679

So etwas wird es tun. Die for Schleife muss möglicherweise geändert werden, je nachdem, welche Dateinamen Sie erfassen möchten.

for fspec1 in DET01-ABC-5_50-*.dat ; do
    fspec2=$(echo ${fspec1} | sed 's/-ABC-/-XYZ-/')
    mv ${fspec1} ${fspec2}
done

Sie sollten diese Skripte immer unter folgenden Bedingungen testen Kopien Ihrer Daten, und zwar in völlig unterschiedlichen Verzeichnissen.

5voto

Sie müssen lernen, wie man sed benutzt http://unixhelp.ed.ac.uk/CGI/man-cgi?sed

Und auch um for zu verwenden, damit Sie Ihre Dateieinträge in einer Schleife durchgehen können http://www.cyberciti.biz/faq/bash-for-loop/

Ihr Befehl wird in etwa so aussehen, ich habe keinen Begriff neben mir und kann es daher nicht überprüfen

for i in `dir` do mv $i `echo $i | sed '/orig/new/g'`

1voto

stribika Punkte 3126

Ich mache das gerne mit sed. In Ihrem Fall:

for x in DET01-*.dat; do
    echo $x | sed -r 's/DET01-ABC-(.+)\.dat/mv -v "\0" "DET01-XYZ-\1.dat"/'
done | sh -e

Am besten lassen Sie den "sh -e"-Teil zunächst weg, um zu sehen, was ausgeführt wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X