Como posso remover uma determinada string do nome do arquivo? [duplicado]

0

Eu 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 faz algum trabalho em /var/lib/jenkins/scripts/my_script.sh .

Eu quero remover o "01-" inicial dos nomes de arquivo desse script. Existe alguma boa maneira de fazer isso?

Eu tentei a solução de link mas 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 3 primeiros caracteres, que são nome do diretório, não nome do arquivo. Eu quero remover 3 caracteres após 21 caracteres do nome do arquivo.

Alguma maneira melhor de fazer isso?

    
por Sunil Shahu 27.04.2017 / 12:48

1 resposta

2

O problema é que você está usando o caminho completo, de modo que inclua o diretório. A solução mais simples é primeiro cd no diretório de destino e, em seguida, executar o for loop:

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

Ou usando as habilidades do próprio shell:

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 realmente renomear.

No entanto, como Sundeep apontou nos comentários, se você quiser remover apenas 01- , remova-o especificamente:

rename -n 's|.*/01-||' /var/lib/jenkins/bin/*
    
por 27.04.2017 / 13:04