Como posso remover determinada string do nome do arquivo?

Como posso remover determinada string do nome do arquivo?

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 cdentrar no diretório de destino e depois executar o forloop:

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 renameem sistemas baseados em Debian, perl-renameem outros), você pode fazer:

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

Depois de ter certeza de que funciona, remova o -npara 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/*

informação relacionada