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 cd
al directorio de destino y luego ejecutar el for
bucle:
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 rename
en sistemas basados en Debian, perl-rename
en otros), puede hacer:
rename -n 's|.*/...||' /var/lib/jenkins/bin/*
Una vez que te hayas asegurado de que funciona, elimina el -n
para 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/*