Remover/excluir uma sequência de caracteres de nomes de arquivos

Remover/excluir uma sequência de caracteres de nomes de arquivos

Eu tenho vários arquivos de texto que terminam com a linha www.thethinkfoundation.org, por exemplo:

file1.www.thethinkfoundation.org.txt
file2.www.thethinkfoundation.org.txt
.
.
.

file100.www.thethinkfoundation.org.txt

Desejo remover/excluirwww.thethinkfoundation.org

Tentei o seguinte comando em um terminal para conseguir isso:

for f in www.thethinkfoundation.org*; do mv "$f" "${f#thethinkfoundation.org}"; done

O resultado foi:

file1..txt
file2..txt
.
.
.

file100..txt

Agradecemos antecipadamente por uma solução que funcione.

PS: Não desejo usar o renamecomando. Na verdade, estou procurando um que funcione em distribuições Linux e *BSD. Meu editor de texto preferido é o nano.

Responder1

Substituição de substring com base emExpansão de parâmetros de shellin bashe alguns outros shells também podem ser alcançados de duas maneiras:

Primeiro, você pode substituirapenas a primeira ocorrência(da esquerda para a direita) de um padrão como este:

${var/pattern/replacement}

Segundo, você pode substituirtodas as ocorrênciasde um padrão como este:

${var//pattern/replacement}

Onde varestá a variável/parâmetro que contém a string e patterné o padrão que você deseja encontrar e substituir nessa string e replacementé o substituto que você deseja substituir patternpor aquele que também pode ser deixado vazio, ou seja, ${var//pattern/}se você deseja apenas excluir esse padrão da corda.

Portanto, a solução desejada ficaria assim:

for f in *www.thethinkfoundation.org*; do
    echo mv -n -- "$f" "${f//www.thethinkfoundation.org./}"
done

Eu adicionei echoum teste para que você possa testá-lo primeiro e depois retirá- echolo e executá-lo novamente para fazer o trabalho real.

informação relacionada