txt Benenne mehrere Dateien um, benenne aber nur einen Teil des Dateinamens in Bash um




ssh rename file (3)

Ich weiß, wie ich Dateien umbenennen kann, aber ich habe Probleme damit.

Ich muss nur test-this in einer for-Schleife umbenennen.

test-this.ext
test-this.volume001+02.ext
test-this.volume002+04.ext 
test-this.volume003+08.ext 
test-this.volume004+16.ext 
test-this.volume005+32.ext 
test-this.volume006+64.ext 
test-this.volume007+78.ext 

Verwenden Sie die rename wie unten gezeigt:

rename test-this foo test-this*

Dies ersetzt test-this durch foo in den Dateinamen.

Wenn Sie nicht umbenannt haben rename verwenden Sie eine for Schleife wie unten gezeigt:

for i in test-this*
do
    mv "$i" "${i/test-this/foo}"
done

Wenn Sie alle diese Dateien in einem Ordner haben und unter Linux arbeiten, können Sie Folgendes verwenden:

rename 's/test-this/REPLACESTRING/g' *

Das Ergebnis wird sein:

REPLACESTRING.ext
REPLACESTRING.volume001+02.ext
REPLACESTRING.volume002+04.ext
...

rename kann einen Befehl als erstes Argument annehmen. Der Befehl besteht hier aus vier Teilen:

  1. s : flag um eine Zeichenkette durch eine andere zu ersetzen,
  2. test-this : die Zeichenfolge, die Sie ersetzen möchten,
  3. REPLACESTRING : Die Zeichenfolge, durch die die REPLACESTRING , und
  4. g : Ein Flag, das angibt, dass alle Übereinstimmungen des Suchstrings ersetzt werden sollen, dh wenn der Dateiname test-this-abc-test-this.ext das Ergebnis REPLACESTRING-abc-REPLACESTRING.ext .

Wenden Sie sich an man sed um eine detaillierte Beschreibung der Flaggen zu erhalten.


Funktion

Ich bin auf OSX und meine Bash kommt nicht mit rename als integrierte Funktion. Ich erstelle in meinem .bash_profile eine Funktion, die das erste Argument übernimmt. .bash_profile ist ein Muster in der Datei, das nur einmal übereinstimmen sollte, und es ist egal, was danach kommt. Es wird durch den Text von Argument 2 ersetzt.

rename() {
    for i in $1*
    do
        mv "$i" "${i/$1/$2}"
    done
}

Eingabedateien

test-this.ext
test-this.volume001+02.ext
test-this.volume002+04.ext 
test-this.volume003+08.ext 
test-this.volume004+16.ext 
test-this.volume005+32.ext 
test-this.volume006+64.ext 
test-this.volume007+78.ext 

Befehl

rename test-this hello-there

Ausgabe

hello-there.ext
hello-there.volume001+02.ext
hello-there.volume002+04.ext 
hello-there.volume003+08.ext 
hello-there.volume004+16.ext 
hello-there.volume005+32.ext 
hello-there.volume006+64.ext 
hello-there.volume007+78.ext 




file-rename