Terminal - renomeia o arquivo com base em curinga

0

Eu tenho um cenário em que tenho dois arquivos em uma pasta:

1) Foo bar.pdf

2) Another File.pdf

Estou mesclando os dois arquivos em um. O arquivo resultante deve ser nomeado "Foo.pdf".

Assim, o arquivo .sh conteria a seguinte função:

Check if *.pdf contains "bar" //check all PDFs in the folder for the word "bar" in the filename.

If TRUE ($value = "Foo.pdf") //extract "Foo" from filename

mkfile = $value.pdf

Assim, eu acabaria com algo como o seguinte:

(Directory 1)

FILE 1: Foo Blah Blah 123.pdf

FILE 2: Another File.pdf

...run script...

FILE 3: Foo.pdf //created file

Espero que isso faça sentido? Será que alguém me pode apontar a direção certa, por favor?

    
por Guit4eva 29.08.2018 / 20:58

1 resposta

0

Aqui está uma maneira:

for FILE in *bar.pdf; do
    NEWNAME=$(echo $FILE | sed -En 's/(.*)bar.pdf/.pdf/p')
    mv $FILE $NEWNAME
done

Explicação: Isso usa a sintaxe for-loop e o globbing de shell de bash (correspondência de nome de arquivo baseado em curinga) para processar cada arquivo que termina em "bar.pdf". Ele pega o nome de cada arquivo e o envia para sed . sed é informado para lembrar a parte do nome do arquivo antes do "bar.pdf" e, em seguida, substituir o nome do arquivo pela parte lembrada, com ".pdf" anexado ao final. Esse novo nome de arquivo é armazenado como NEWNAME. Em seguida, mv é invocado para renomear o arquivo para seu novo nome e o loop continua a processar o próximo arquivo (se houver mais arquivos correspondentes a * bar.pdf).

(Testado usando o macOS High Sierra 10.13.6's embutidos bash e sed . As ferramentas do seu sistema podem variar. Tenho certeza que o GNU sed no Linux usa diferentes opções de linha de comando que o BSD sed no macOS, portanto, verifique primeiro a sua página local sed man.)

    
por 29.08.2018 / 23:32

Tags