Strings no shell [RESOLVIDO]

1. Strings no shell [RESOLVIDO]

Erick Duarte
erickod

(usa Ubuntu)

Enviado em 04/09/2012 - 09:54h

Bom dia a todos!
Tenho um banco de imagens com cerca de 30.000 imagens. Cada imagem tem um título semelhante a este: abstract_places_fractal_870871_o.jpg e todas estão em uma única pasta. Como podem ver, o título não é nada mais que categorias a qual a imagem pertence.

O que eu gostaria de fazer e não estou conseguindo é o seguinte.

1. Fazer uma lista com o nome das imagens e armazená-las em lista_nomes.txt;
2. Como cada linha do arquivo lista_nomes.txt é um nome de uma imagem como este abstract_places_fractal_870871_o.jpg, eu gostaria de ler a linha 1, remover a parte que contem .jpg, quebrar o titulo nos _ e armazenar isso em um array chamado categorias.
3. Inicar o programa XYZ e abrir o arquivo que está na linha 1 do lista_nomes.txt e passar como parametros o que está no array categorias.
4. Fazer isso com todos os arquivos do lista_nomes.txt;


Peço ajuda, pois não sei como poderia fazer isso.

Agradeço a todos!



  


2. Re: Strings no shell [RESOLVIDO]

Jose Renan
JoseRenan

(usa Ubuntu)

Enviado em 04/09/2012 - 11:50h


Pegue a lista das imagens e coloque o nome de cada imagem em uma linha de um arquivo .txt;

Não sei muito de shell mas o comando para isso é algo como ls *.jpg >> arquivo.txt


Pegue a primeira linha do arquivo .txt e faça a separação das categorias relacionadas a imagem e as armazene em um array

Em C++ eu faria o seguinte: lia o nome do arquivo até a numeração, q deve ser o q diferencia o nome dos arquivos, comparava esse nome com as categorias que eu tenho e então movia o arquivo para uma pasta tipo
se (nomearquivoatenumero = categoria_abstract)
mova arquivoqueeulionome para categoria_abstract

ou no seu caso armazenar o nome em um array.

o 3 eu num saquei...



3. Re: Strings no shell [RESOLVIDO]

Erick Duarte
erickod

(usa Ubuntu)

Enviado em 04/09/2012 - 14:48h

Alterei o tópico para facilitar o entendimento.


4. Array

AILTON DORIA
ailton.doria

(usa Debian)

Enviado em 04/09/2012 - 18:05h

Olá, tentei simular sua necessidade.

criei um diretorio imagens e no mesmo criei arquivos com extensão .jpg.

cd imagens/

for var in $(ls *.jpg); do for i in $(echo $var | sed -e "s/.jpg/.txt/g");do echo $i;done;done

abstract_places_fractal_87087110.txt
abstract_places_fractal_87087111.txt
abstract_places_fractal_87087112.txt
abstract_places_fractal_87087113.txt
abstract_places_fractal_87087114.txt
abstract_places_fractal_87087115.txt
abstract_places_fractal_87087116.txt
abstract_places_fractal_87087117.txt
abstract_places_fractal_87087118.txt
abstract_places_fractal_87087119.txt
abstract_places_fractal_8708711.txt
abstract_places_fractal_87087120.txt
abstract_places_fractal_8708712.txt
abstract_places_fractal_8708713.txt
abstract_places_fractal_8708714.txt
abstract_places_fractal_8708715.txt
abstract_places_fractal_8708716.txt
abstract_places_fractal_8708717.txt
abstract_places_fractal_8708718.txt
abstract_places_fractal_8708719.txt


Só não entendi muito bem o que você esta pedindo quer fazer no final do item 2 e no 3


#remover a parte que contem .jpg, quebrar o titulo nos _ e armazenar isso em um array chamado categorias.
#3. Inicar o programa XYZ e abrir o arquivo que está na linha 1 do lista_nomes.txt e passar como parametros o


Espero que eu conseguiga te ajudar !


5. Re: Strings no shell [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 04/09/2012 - 20:30h

Nem precisaria criar o arquivo de lista, a não ser que precisa arquivar isso, veja como dar pra fazer:



#!/bin/bash

#1. Fazer uma lista com o nome das imagens e armazená-las em lista_nomes.txt;
#2. Como cada linha do arquivo lista_nomes.txt é um nome de uma imagem como este abstract_places_fractal_870871_o.jpg, eu gostaria de ler a linha 1, remover a parte que contem .jpg, quebrar o titulo nos _ e armazenar isso em um array chamado categorias.
#3. Inicar o programa XYZ e abrir o arquivo que está na linha 1 do lista_nomes.txt e passar como parametros o que está no array categorias.
#4. Fazer isso com todos os arquivos do lista_nomes.txt;
# ========================================================
for ARQUIVO in $(ls -1 *.jpg)
do
CATEGORIAS=( $(echo "${ARQUIVO%%.jpg}" | tr '_' ' ' ) ) # cria o array
programaXYZ "$ARQUIVO" "${CATEGORIAS[@]}" # TODO: passando arquivo e os parametros, a forma correta só vc sabe, pois não especificou o programa
done



6. Re: Strings no shell [RESOLVIDO]

VM
tn4ehi

(usa Outra)

Enviado em 04/09/2012 - 22:03h

Eu creio que o que queira fazer é passar a categoria referente a imagem, exemplo:

programaXYZ abstract_places_fractal_870871_o.jpg abstract places fractal 870871 o

Uma forma simples e eficiente:


find . -name "*.jpg" -type f | while read file; do
programaXYZ ${file} $(echo ${file%%.jp*} | tr '_' ' ')
done


Explanando:

find . -name "*.jpg" -type f encontra todos os arquivos .jpg na pasta atual. (você pode substitur "." por qualquer outra pasta)

| while read file; do A cada loop do find armazena resultado em $file e executa os comandos do while.[/b]

programaXYZ ${file} [...] Executa o programa XYZ, passando $file como parâmetro e...

$(echo ${file%%.jp*} [...] Retira a extensões (jpg, jpeg, jpe) e ...

| tr '_' ' ') substituí os underlines por espaços e repassa como parâmetro




7. Re: Strings no shell [RESOLVIDO]

Erick Duarte
erickod

(usa Ubuntu)

Enviado em 05/09/2012 - 10:18h

Agradeço a ajuda de todos, pois não estava conseguindo fazer isso.
A ideia era usar o programa exiftool ou o exiv2 para colcocar palavras chave (keywords) nos metadados de cada arquivo de forma automática e graça a ajuda de vocês foi possível!


Obrigado!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts