¿Cómo puedo eliminar cierta cadena del nombre del archivo?

¿Cómo puedo eliminar cierta cadena del nombre del archivo?

Tengo algunos archivos en el siguiente directorio:/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

Además, tengo un script que funciona en /var/lib/jenkins/scripts/my_script.sh.

Quiero eliminar el "01-" inicial de los nombres de archivos de este script. ¿Hay alguna buena manera de hacer esto?

Probé la solución dehttps://stackoverflow.com/questions/28305134/remove-first-n-character-from-bunch-of-file-names-with-cutpero no me funciona.

Obtengo un resultado como este:

Dominio

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

Producción

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

Como puede ver, elimina los primeros 3 caracteres, que son el nombre del directorio, no el nombre del archivo. Quiero eliminar 3 caracteres después de 21 caracteres del nombre del archivo.

¿Alguna mejor manera de hacer esto?

Respuesta1

El problema es que estás utilizando la ruta completa, por lo que incluye el directorio. La solución más sencilla es ir primero cdal directorio de destino y luego ejecutar el forbucle:

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

O, usando el propio shellmanipulación de cuerdashabilidades:

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

Alternativamente, si tiene perl-rename (llamado renameen sistemas basados ​​en Debian, perl-renameen otros), puede hacer:

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

Una vez que te hayas asegurado de que funciona, elimina el -npara que realmente cambie el nombre.


Sin embargo, como Sundeep señaló en los comentarios, si solo desea eliminar 01-, elimínelo específicamente:

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

información relacionada