Wie kann ich bestimmte Zeichenfolgen aus dem Dateinamen entfernen?

Wie kann ich bestimmte Zeichenfolgen aus dem Dateinamen entfernen?

Ich habe einige Dateien im folgenden Verzeichnis:/var/lib/jenkins/bin/

-rwxr-xr-x. 1 root root 4430846 Apr 27 09:45 01-DSP-04.12_03_crc.bin
-rwxr-xr-x. 1 root root 1659036 Apr 27 09:45 01-FL4-04.12_02-crc.bin
-rwxr-xr-x. 1 root root 1659036 Apr 27 09:45 01-FL8-04.12_02-crc.bin
-rwxr-xr-x. 1 root root 1659036 Apr 27 09:46 01-FPGA-04.12_02-crc.bin
-rwxr-xr-x. 1 root root  524328 Apr 27 09:46 01-MMI-04.11_05-crc.bin
-rwxr-xr-x. 1 root root   27692 Apr 27 09:46 01-PIC-04.11_06-crc.bin

Außerdem habe ich ein Skript, das einige Arbeiten erledigt /var/lib/jenkins/scripts/my_script.sh.

Ich möchte das führende „01-“ aus den Dateinamen dieses Skripts entfernen. Gibt es eine gute Möglichkeit, dies zu tun?

Ich habe die Lösung von ausprobierthttps://stackoverflow.com/questions/28305134/entfernen-Sie-die-ersten-n-Zeichen-aus-einer-Sammlung-von-Dateinamen-mit-Cutaber funktioniert bei mir nicht.

Ich erhalte eine Ausgabe wie diese:

Befehl

$ for file in /var/lib/jenkins/bin/*; do echo mv $file `echo $file | cut -c4-`; done

Ausgabe

mv /var/lib/jenkins/bin/01-DSP-04.12_03_crc.bin r/lib/jenkins/bin/01-DSP-04.12_03_crc.bin
mv /var/lib/jenkins/bin/test.sh r/lib/jenkins/bin/test.sh

Wie Sie sehen, werden die ersten drei Zeichen entfernt, die den Verzeichnisnamen und nicht den Dateinamen darstellen. Ich möchte drei Zeichen nach dem 21. Zeichen aus dem Dateinamen entfernen.

Gibt es eine bessere Möglichkeit, dies zu tun?

Antwort1

Das Problem besteht darin, dass Sie den vollständigen Pfad verwenden, der also das Verzeichnis einschließt. Die einfachste Problemumgehung besteht darin, zuerst cdin das Zielverzeichnis zu wechseln und dann die forSchleife auszuführen:

cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "$(echo "$file" | cut -c4-)"; done

Oder mit der Shell-eigenenZeichenfolgenmanipulationFähigkeiten:

cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "${file#????}"; done

Alternativ können Sie Folgendes tun, wenn Sie über perl-rename verfügen (wird renameauf Debian-basierten Systemen aufgerufen, perl-renameauf anderen):

rename -n 's|.*/...||' /var/lib/jenkins/bin/*

Wenn Sie sichergestellt haben, dass es funktioniert, entfernen Sie es, -ndamit die Umbenennung tatsächlich erfolgt.


Wie Sundeep jedoch in den Kommentaren anmerkte, gilt: Wenn Sie nur entfernen möchten 01-, entfernen Sie das gezielt:

rename -n 's|.*/01-||' /var/lib/jenkins/bin/*

verwandte Informationen