Como anexar TEXT dentro de um arquivo de texto ao END do nome do arquivo de um arquivo diferente?

0

Eu descobri como baixar várias imagens do flickr.com e salvar as informações da tag em um arquivo de texto separado ao lado do arquivo de imagem.

Por exemplo:

$ ls
2675.jpg
2675.txt

$ cat 2675.txt
_tags_mountains_daylight_oregon

Eu quero copiar as informações da tag para o final dos nomes dos arquivos.

Antes:

2675.jpg

Depois:

2675_tags_mountains_daylight_oregon.jpg

Existe uma maneira de fazer isso? Algo que eu posso colocar em um script bash?

    
por speld_rwong 14.04.2018 / 22:48

2 respostas

2

Usando algumas ferramentas nativas do shell:

for f in *.jpg
do
  mv -- "$f" "${f%.jpg}$(< ${f%.jpg}.txt ).jpg"
done

A sintaxe $(< ...) pede ao bash para ler o conteúdo do arquivo fornecido. O arquivo fornecido é gerado removendo o .jpg e anexando .txt .

    
por 14.04.2018 / 23:21
1

Consegui fazer isso com o seguinte script:

#!/bin/bash

files='/path/to/files'

for file in "$files/"*.jpg; do
    tag=$(grep '_tags_' "${file/.jpg/.txt}")
    bname=${file%.jpg}
    mv "$file" "${bname}${tag}.jpg"
done

Isso passará por todos os arquivos .jpg no caminho que você especificar.

tag irá grep para a string _tags_ no arquivo .txt com o mesmo nome que o atual arquivo .jpg em que está trabalhando e definido para toda a linha.

bname será definido como o nome base do arquivo atual em que está trabalhando (sem extensão)

Irá então renomear o arquivo para name / tag.jpg (Então, no caso do exemplo 2675_tags_mountains_daylight_oregon.jpg )

    
por 14.04.2018 / 22:56