[RISOLTO]Bash selezionare file simili

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
sverdrup
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 607
Iscrizione: giovedì 15 giugno 2006, 12:51

[RISOLTO]Bash selezionare file simili

Messaggio da sverdrup »

Salve a tutti,
ho bisogno di selezionare tutti i file presenti in una cartella che hanno i primi 6 caratteri del nome identici..
Stò tentando con find + grep, ma fino ad ora con pessimi risultati...
Grazie a tutti per l'aiuo
Ciauzzzzzzzz
Ultima modifica di sverdrup il giovedì 13 marzo 2008, 13:33, modificato 1 volta in totale.
"Not everything that counts can be counted, and not everything that can be counted counts."
Alex M0rF3uS
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2362
Iscrizione: venerdì 13 luglio 2007, 18:43
Contatti:

Re: Bash selezionare file simili

Messaggio da Alex M0rF3uS »

ls | grep primiseicaratteri* e poi lo accoppi ad un while read o for dipende da cosa devi fare
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Bash selezionare file simili

Messaggio da crap0101 »

scusa, ma con l' asterisco?

a me funziona così:
ls | grep -e XXXX
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
sverdrup
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 607
Iscrizione: giovedì 15 giugno 2006, 12:51

Re: Bash selezionare file simili

Messaggio da sverdrup »

con
ls | grep -e XXXX
il problema è che io una cartella strapiena di file, 4 per ogni giorno che hanno il nome costituito dalla data + altri caratteri,
la mia intenzione è quella di riuscire a selezionare i file in funzione del primi carattaeri del nome per poi processarli di 4 in 4...
In poche parole con ls | grep -e XXXX sono costretto ad inserire svariate decine di nomi di file, mentre io vorrei automatizzare il tutto,
senza dover scrivere tutte quelle righe, cioè lo scipt in poche parole dovrebbe:
leggere i file contenuti all'interno di una cartella e selezionarli in base al nome, quelli con lo stesso nome li deve processare assieme!!
Qualche idea di come si possa fare?????
Grazie mille a tutti
"Not everything that counts can be counted, and not everything that can be counted counts."
Alex M0rF3uS
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2362
Iscrizione: venerdì 13 luglio 2007, 18:43
Contatti:

Re: Bash selezionare file simili

Messaggio da Alex M0rF3uS »

Codice: Seleziona tutto

for i in $(ls | grep -i primiseicaratteri*); do quello; che; devi; fare; done;
Avatar utente
sverdrup
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 607
Iscrizione: giovedì 15 giugno 2006, 12:51

Re: Bash selezionare file simili

Messaggio da sverdrup »

Forse non mi sono spiegato,
dopo una giornata così lunga comincio a dare i numeri.
Devo riuscire a selezionare tra centinaia di nomi tutti quelli che cominciano con gli stessi caratteri a gruppi, in modo poi di farci quello che mi pare..
Ex:
123456_i.o
123456_y.o
123456_f.o
123456_e.o

133456_i.o
133456_y.o
133456_f.o
133456_e.o

etc
etc
etc
etc

Io vorrei riuscire a selezionare tutti quelli uguali....
Ma non sò come, se devo scrivere per ogni serie di quattro file il nome stò rovinato sono circa 1500  :'(
Help me please
"Not everything that counts can be counted, and not everything that can be counted counts."
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Bash selezionare file simili

Messaggio da crap0101 »

allora forse è meglio fare uno scriptino
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Alex M0rF3uS
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2362
Iscrizione: venerdì 13 luglio 2007, 18:43
Contatti:

Re: Bash selezionare file simili

Messaggio da Alex M0rF3uS »

ah....ho capito...non lo so se con il bash si può fare quello che dici tu, se si può fare non conosco il modo quindi mi rimetto nelle mani di un espertone di bash
Avatar utente
scacchia
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2863
Iscrizione: martedì 15 maggio 2007, 22:39
Località: Un po' qui e un po' la

Re: Bash selezionare file simili

Messaggio da scacchia »

io di bash non ci capisco molto ma forse qualcuno può tradurlo...

for i in tutti_i_file
  nome_parziale = substring(nome_file,1,6)
  if nome_parziale = nome_parziale_prev or primo_file_della_lista
      selezionalo
  else
      if not primo_file_della_lista
        processa i 4 file
      end-if
  end-if
  nome_parziale_prev = nome_parziale
end-for
Ultima modifica di scacchia il mercoledì 12 marzo 2008, 17:57, modificato 1 volta in totale.
"Non importa quanto corri, ma dove corri e perchè" Z. Zeman
"In an open world, who needs Windows or Gates?"
"Io lo spero vivamente, ma ho i miei dubbi che possa vincere uno scudetto con la Roma, che è il sogno più grande della mia vita." D.D.R.
Avatar utente
sverdrup
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 607
Iscrizione: giovedì 15 giugno 2006, 12:51

Re: Bash selezionare file simili

Messaggio da sverdrup »

Si il tutto fa parte di uno script più grande, ma non saprei come fare questa parte,
non sono molto esperto nell'I/O....
Qualcuno saprebbe darmi una mano con questa porzione di scriptino???
Grazie in anticipo a tutti
(b2b)
"Not everything that counts can be counted, and not everything that can be counted counts."
Avatar utente
Guiodic
Accecante Asceta
Accecante Asceta
Messaggi: 28474
Iscrizione: martedì 24 aprile 2007, 15:28
Località: Roma
Contatti:

Re: Bash selezionare file simili

Messaggio da Guiodic »

@agli altri: ma vi state a incasinare... basta un
ls abcdef*

@sverdrup: messa così è più complicata, stiamo parlando di tutte le disposizioni di 6 caratteri per 6 posti (permutazione semplice) ed è pari nel tuo caso a 6!=720

L'algoritmo non è complicatissimo. Però magari la stessa cosa può essere fatta in modo più semplice, se magari decrivi cosa devi fare e come sono i nomi dei file nella directory (a parte quelli che devi selezionare) forse si può risolvere più semplicemente.
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Bash selezionare file simili

Messaggio da crap0101 »

in bash non saprei, ma se può esserti utile, con python farei una cosa così (la prima parte per  scremare i file con i nomi caratteri uguali):
import os
nomedir=raw_input("nome della cartella in cui sono i files:")
a=os.listdir(nomedir)
DIV=[]
for x in a:
if x[:7] not in DIV:DIV.append(x[:7])
print DIV  # DIV è la lista che contiene tutte le combinazioni diverse
              #dei primi sei caratteri dei file che sono nella cartella 
              #Dopo puoi usare questa per fare le operazioni sui gruppi
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
paper0k
Rampante Reduce
Rampante Reduce
Messaggi: 7220
Iscrizione: lunedì 2 ottobre 2006, 13:39
Contatti:

Re: Bash selezionare file simili

Messaggio da paper0k »

Codice: Seleziona tutto

#! /bin/bash

function elabora() {
	echo "gruppo finito! E' composto da <$*>"
}

gruppo=""
lgroup=""

for F in *
do
	grp=$(echo $F|cut -c -4)
	gruppo=${gruppo:-$grp}
	if [[ "${grp}" != "${gruppo}" ]]
	then
		elabora ${lgroup}
		lgroup=""
	fi	
	lgroup="${lgroup} ${F}"
	gruppo=$grp
done
Devi sono personalizzarti la funzione "elabora" ;)
Chiunque può essere ragionevole, ma esser sani di mente è raro (Oscar Wilde)
Wiki|Blog|Twitter|Identi.ca|last.fm
Avatar utente
sverdrup
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 607
Iscrizione: giovedì 15 giugno 2006, 12:51

Re: Bash selezionare file simili

Messaggio da sverdrup »

Grazie a tutti, domani provo e vi faccio sapere.
Comunque non si tratta di permutazioni, o meglio delle permutazioni di sei cifre....
per doirla in soldoni devo raggruppare tutti i file che hanno lo stesso nome,
dove il nome è caratterizzato da una stringa di 6 caratteri che è data dalla data di creazione.
Dopodichè devo elaborare tutti i file che hanno il nome uguale in maniera indipendente, ma questa è un'altra storia, e comunque il codice già l'ho scritto, solo che non riesco con la fase iniziale dello script che mi deve organizzare il tutto, senza la quale non posso andare avanti.....
GRAZIE MILLE a tutti dell'aiuto,
spero di non rompervi troppo con questa cosa.....  :-[
Ciauzzzzzzz
;)
"Not everything that counts can be counted, and not everything that can be counted counts."
Avatar utente
sverdrup
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 607
Iscrizione: giovedì 15 giugno 2006, 12:51

Re: Bash selezionare file simili

Messaggio da sverdrup »

Ok grazie mille a tutti,
ho modificato lo script di paper0k e funziona alla grande,
soltanto che adesso devo riuscire ad eliminare gli spazi che ottengo incolonnando i vari dati in un unico file...
gli spazi si trovano all'inizio del file:
EX:
    3264    34612  3461236  34621
    7648    56365  3467778  32489
praticamente devo eliminare quelli che si trovano davanti alla prima colonna!
Spero di non dovervi disturbare più  :-[
Grazie a tutti
Ciauzzzzz
"Not everything that counts can be counted, and not everything that can be counted counts."
Avatar utente
sverdrup
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 607
Iscrizione: giovedì 15 giugno 2006, 12:51

Re: Bash selezionare file simili

Messaggio da sverdrup »

Grazie a tutti ho risolto creando un file di appoggio in questo modo:

Codice: Seleziona tutto

awk ‘{print $2}’ nome_file
e unendo tutti i file in colonne!!
;D  ;D

Grazie MILLE  (b2b)
Ciauzzzzz
"Not everything that counts can be counted, and not everything that can be counted counts."
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti