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 cd
in das Zielverzeichnis zu wechseln und dann die for
Schleife 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 rename
auf Debian-basierten Systemen aufgerufen, perl-rename
auf anderen):
rename -n 's|.*/...||' /var/lib/jenkins/bin/*
Wenn Sie sichergestellt haben, dass es funktioniert, entfernen Sie es, -n
damit 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/*