Tenho alguns arquivos no seguinte diretório:/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
Além disso, tenho um script que funciona em /var/lib/jenkins/scripts/my_script.sh
.
Quero remover o "01-" inicial dos nomes dos arquivos deste script. Existe alguma boa maneira de fazer isso?
Eu tentei a solução dehttps://stackoverflow.com/questions/28305134/remove-first-n-character-from-bunch-of-file-names-with-cutmas não funciona para mim.
Eu recebo uma saída assim:
Comando
$ for file in /var/lib/jenkins/bin/*; do echo mv $file `echo $file | cut -c4-`; done
Saída
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 você pode ver, ele remove os três primeiros caracteres que são o nome do diretório, não o nome do arquivo. Quero remover 3 caracteres após 21 caracteres do nome do arquivo.
Alguma maneira melhor de fazer isso?
Responder1
O problema é que você está usando o caminho completo, incluindo o diretório. A solução mais simples é primeiro cd
entrar no diretório de destino e depois executar o for
loop:
cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "$(echo "$file" | cut -c4-)"; done
Ou, usando o próprio shellmanipulação de cordashabilidades:
cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "${file#????}"; done
Alternativamente, se você tiver perl-rename (chamado rename
em sistemas baseados em Debian, perl-rename
em outros), você pode fazer:
rename -n 's|.*/...||' /var/lib/jenkins/bin/*
Depois de ter certeza de que funciona, remova o -n
para renomeá-lo.
No entanto, como Sundeep apontou nos comentários, se você deseja apenas remover 01-
, remova-o especificamente:
rename -n 's|.*/01-||' /var/lib/jenkins/bin/*